Wpf控制可见性?

WPF*_*zen 2 .net c# vb.net wpf visibility

我正在创建一个Wpf浏览器应用程序,它对不同的页面有多个控件.每个页面都遵循相同的模式,如下所示:

在每个页面加载事件中,用户都可以看到两个组合框.当用户选择的任何值combobox一样,那么所有的控制button,label并且textbox对用户可见.

我想编写一个公共类/函数来隐藏控件,以便我可以在整个应用程序中使用.有什么办法可以吗?

akj*_*shi 5

解决方案1:

在每个页面中,你只需添加一个触发器来隐藏/显示这样的控件 -

<ComboBox Height="22" Name="comboBox1" /> 
<Grid>
   <Grid.Style>
        <Style TargetType="{x:Type Grid}"> 
            <Setter Property="Visibility" Value="Visible"></Setter> 
            <Style.Triggers> 
                <DataTrigger 
                    Binding="{Binding ElementName=comboBox1, Path=SelectedItem}" 
                    Value="{x:Null}"> 
                    <Setter Property="Visibility" Value="Collapsed"></Setter> 
                 </DataTrigger> 
            </Style.Triggers> 
        </Style>
   <Grid.Style>

  <!-- Your controls; TextBox, Buttons etc. -->

</Grid> 
Run Code Online (Sandbox Code Playgroud)

解决方案2:

如果你想要更复杂的逻辑(比如基于两个组合框,那么你可以创建一个MultiValueConverter并在上面的XAML中使用它来设置VisibilityGrid.

如果在多个窗口中重复使用它,您可以创建一个样式并将其应用于所有Windows中的网格.

解决方案3:

建议使用ethicallogics创建一个公共ViewModel.

如果您使用ViewModel approch,那么就不需要拥有Visibility属性,只需SelectedItem在触发器或转换器中使用该属性; 即使你想创建一个seaprate属性,我建议你把它变成Boolean类型并在XAML中使用它.

您可以在所有三种情况下创建一个共同样式,并在所有窗口中重复使用它.