我正在創建一個Wpf瀏覽器應用程序,它在不同的頁面上有多個控件。每個頁面遵循相同的模式,如下所示:Wpf控制能見度?
在每個頁面加載事件中,都有兩個對用戶可見的組合框。當用戶在combobox
中選擇任何值時,用戶可以看到像button
,label
和textbox
這樣的所有控件。
我想編寫一個通用的類/函數來隱藏控件,以便我可以在整個應用程序中使用。有什麼辦法可以做到嗎?
我正在創建一個Wpf瀏覽器應用程序,它在不同的頁面上有多個控件。每個頁面遵循相同的模式,如下所示:Wpf控制能見度?
在每個頁面加載事件中,都有兩個對用戶可見的組合框。當用戶在combobox
中選擇任何值時,用戶可以看到像button
,label
和textbox
這樣的所有控件。
我想編寫一個通用的類/函數來隱藏控件,以便我可以在整個應用程序中使用。有什麼辦法可以做到嗎?
解決方案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來設置Grid的Visibility
。
如果在多個窗口中重複使用它,您可以創建一個Style並將其應用到所有Windows中的Grid。
解決方案3:
創建公共視圖模型作爲ethicallogics建議。
如果你用視圖模型去計算策略那麼就沒有必要有Visibility
財產的,只是使用觸發器或轉換器SelectedItem
財產;即使你想創建一個seaprate屬性,我建議你使它成爲Boolean
類型並在XAML中使用它。
您可以在所有三種情況下創建一個通用樣式,並在所有窗口中重複使用該樣式。
在你的ViewModelBase類中創建一個Type屬性(比如SelectedItem)作爲你的列表的綁定到哪個ComboBox。並將此屬性綁定到ComboBox的選定項目。創建類型可見性的另一個屬性(稱爲ControlVisibilty),並將其綁定到所有控件(其可見性要在ComboBox選定項目的基礎上更改)Visiblity屬性。現在,在SelectedItem屬性的Setter中,根據您的邏輯設置ControlVisibilty的值。您可以對另一個ComboBox執行相同的操作。我希望這可以幫助您獲得一個想法。
謝謝你的好主意! – WPFcitizen 2012-07-18 16:21:47
謝謝,我會嘗試! – WPFcitizen 2012-07-18 15:38:44
非常感謝您的幫助!解決方案1工作完美。 :) – WPFcitizen 2012-07-18 16:21:27
很高興幫助:) – akjoshi 2012-07-18 17:44:04