2015-11-24 3 views
0

Мне нужно добавить DataTrigger динамически на основе взаимодействия пользователя с функцией поиска, поэтому это невозможно сделать в XAML. Однако основная цель того, что я пытаюсь сделать, можно увидеть из кода XAML ниже. Он должен изменить видимость кнопки, основанной на состоянии IsChecked ToggleButton.Как добавить 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

Мне любопытно, какие взаимодействия с пользователем необходимо, чтобы активировать триггер? Я не могу думать о случае, когда вы не могли использовать XAML для DataTrigger. – Rachel

+0

Также вы можете уточнить, что вы подразумеваете под «не будет работать»? Видимость не переключается? Я также не понимаю, где 'myToggleButton' и' myButton в вашем коде, вы вручную добавляете его в Visual Tree? И это ваш полный код? – Rachel

+0

Спасибо за ваш комментарий, Рейчел. Причина, по которой я не могу использовать XAML, и, возможно, я просто не знаю, что делает это доступным, это то, что при каждом поиске есть неизвестное количество «родительских» togglebuttons. Кроме того, всегда есть неизвестное количество «дочерних» кнопок, прикрепленных к этим переключателям для каждого поиска. Если есть способ динамически заполнить мою сетку результатами поиска с помощью этих элементов управления, я не могу использовать 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> 
Смежные вопросы