2012-07-18 81 views
2

我正在創建一個Wpf瀏覽器應用程序,它在不同的頁面上有多個控件。每個頁面遵循相同的模式,如下所示:Wpf控制能見度?

在每個頁面加載事件中,都有兩個對用戶可見的組合框。當用戶在combobox中選擇任何值時,用戶可以看到像button,labeltextbox這樣的所有控件。

我想編寫一個通用的類/函數來隱藏控件,以便我可以在整個應用程序中使用。有什麼辦法可以做到嗎?

回答

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來設置Grid的Visibility

如果在多個窗口中重複使用它,您可以創建一個Style並將其應用到所有Windows中的Grid。

解決方案3:

創建公共視圖模型作爲ethicallogics建議。

如果你用視圖模型去計算策略那麼就沒有必要有Visibility財產的,只是使用觸發器或轉換器SelectedItem財產;即使你想創建一個seaprate屬性,我建議你使它成爲Boolean類型並在XAML中使用它。

您可以在所有三種情況下創建一個通用樣式,並在所有窗口中重複使用該樣式。

+0

謝謝,我會嘗試! – WPFcitizen 2012-07-18 15:38:44

+0

非常感謝您的幫助!解決方案1工作完美。 :) – WPFcitizen 2012-07-18 16:21:27

+0

很高興幫助:) – akjoshi 2012-07-18 17:44:04

2

在你的ViewModelBase類中創建一個Type屬性(比如SelectedItem)作爲你的列表的綁定到哪個ComboBox。並將此屬性綁定到ComboBox的選定項目。創建類型可見性的另一個屬性(稱爲ControlVisibilty),並將其綁定到所有控件(其可見性要在ComboBox選定項目的基礎上更改)Visiblity屬性。現在,在SelectedItem屬性的Setter中,根據您的邏輯設置ControlVisibilty的值。您可以對另一個ComboBox執行相同的操作。我希望這可以幫助您獲得一個想法。

+0

謝謝你的好主意! – WPFcitizen 2012-07-18 16:21:47