我正在创建一个Wpf浏览器应用程序,它对不同的页面有多个控件。每个页面都遵循相同的模式,如下所示:
在每个页面加载事件中,用户都可以看到两个组合框。当用户选择combobox
中的任何值时,用户就可以看到button
,label
和textbox
等所有控件。
我想编写一个公共类/函数来隐藏控件,以便我可以在整个应用程序中使用。我有什么方法可以做到吗?
答案 0 :(得分: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>
解决方案2:
如果你想要更复杂的逻辑(比如基于两个组合框,那么你可以创建一个MultiValueConverter
并在上面的XAML中使用它来设置网格的Visibility
。
如果在多个窗口中重复使用它,您可以创建一个样式并将其应用于所有Windows中的Grid。
解决方案3:
创建一个常见的ViewModel作为ethicallogics建议。
如果您使用ViewModel approch,则不需要Visibility
属性,只需在触发器或转换器中使用SelectedItem
属性;即使你想创建一个seaprate属性,我建议你使用Boolean
类型并在XAML中使用它。
您可以在所有三种情况下创建一个共同样式,并在所有窗口中重复使用它。
答案 1 :(得分:2)
在ViewModelBase类中创建Type的属性(比如SelectedItem)作为列表的属性(ComboBox为Binded)。并将此属性绑定到ComboBox的Selected Item。创建类型可见性的另一个属性(比如ControlVisibilty)并将其绑定到所有控件(要在ComboBox所选项的基础上更改其可见性)Visiblity属性。现在在SelectedItem属性的Setter中根据你的逻辑设置ControlVisibilty的值。你可以对另一个组合框做同样的事情。我希望这有助于你了解。