2015-11-24 124 views
0

我需要根據用戶與搜索功能的交互動態添加DataTrigger,因此無法在XAML中完成。但是,我想要做的基本目標可以從下面的XAML代碼中看到。它需要根據ToggleButton的IsChecked狀態更改按鈕的可見性。如何以編程方式添加DataTrigger

XAML:

<ToggleButton Name="myToggleButton" /> 

<Button Name="myButton"> 
    <Style TargetType="Button"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding ElementName=myToggleButton, Path=IsChecked}" 
         Value="True"> 
       <Setter Property="Visibility" Value="Collapsed" /> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding ElementName=myToggleButton, Path=IsChecked}" 
         Value="False"> 
       <Setter Property="Visibility" Value="Collapsed" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Button> 

這是我在C#中試生產上述XAML的相同的功能。

C#:

ToggleButton myToggleButton = new ToggleButton(); 
Button myButton = new Button(); 
Style style = new Style(typeof(Button)); 
DataTrigger tbChecked = new DataTrigger() 
{ 
    Binding = new Binding("IsChecked") { Source = myToggleButton }, 
    Value = true 
}, 
      tbNotChecked = new DataTrigger() 
{ 
    Binding = new Binding("IsChecked") { Source = myToggleButton }, 
    Value = false 
}; 
tbChecked.Setters.Add(new Setter(Button.VisibilityProperty, Visibility.Visible)); 
tbNotChecked .Setters.Add(new Setter(Button.VisibilityProperty, Visibility.Collapsed)); 
style.Triggers.Add(tbChecked); 
style.Triggers.Add(tbNotChecked); 
myButton.Style = style; 

對於我的生活,我一直無法弄清楚,爲什麼它不會工作。我錯過了什麼?

+0

我很好奇,需要什麼類型的用戶互動激活觸發?我無法真正想到一個你不能使用DataTrigger的XAML的案例。 – Rachel

+0

你也可以澄清你的意思是「不行」嗎?能見度不能切換嗎?我還不清楚'myToggleButton'和'myButton在你的代碼中,你是否手動將它添加到Visual Tree?這是你的完整代碼嗎? – Rachel

+0

謝謝你的評論,Rachel。我不能使用XAML的原因,也許我只是不知道讓這些可用的東西,每次執行搜索時都有未知數的「父」切換按鈕。此外,每次搜索都會在這些按鈕上附加未知數量的「子」按鈕。除非有辦法動態地使用這些控件的搜索結果填充我的網格,否則我不能使用XAML來執行觸發。雖然,我承認我也可能在那裏錯過了一些東西。我對wpf還比較陌生。 – Meloviz

回答

0

也許,你可以試試這個:

<StackPanel Orientation="Horizontal" VerticalAlignment="Center"> 
    <StackPanel.Resources> 
     <BooleanToVisibilityConverter x:Key="b2v"/> 
    </StackPanel.Resources> 

    <CheckBox x:Name="switchCheckBox" Content="Show/Hide" VerticalAlignment="Center"/> 
    <TextBlock Text=" "/> 
    <Button Content="Test Button" Visibility="{Binding ElementName=switchCheckBox, Path=IsChecked, Converter={StaticResource b2v}}" Padding="25,5"/> 

</StackPanel>