Мне нужно добавить 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;
Для жизни меня, я не мог понять, почему он не будет работать. Что мне не хватает?
Мне любопытно, какие взаимодействия с пользователем необходимо, чтобы активировать триггер? Я не могу думать о случае, когда вы не могли использовать XAML для DataTrigger. – Rachel
Также вы можете уточнить, что вы подразумеваете под «не будет работать»? Видимость не переключается? Я также не понимаю, где 'myToggleButton' и' myButton в вашем коде, вы вручную добавляете его в Visual Tree? И это ваш полный код? – Rachel
Спасибо за ваш комментарий, Рейчел. Причина, по которой я не могу использовать XAML, и, возможно, я просто не знаю, что делает это доступным, это то, что при каждом поиске есть неизвестное количество «родительских» togglebuttons. Кроме того, всегда есть неизвестное количество «дочерних» кнопок, прикрепленных к этим переключателям для каждого поиска. Если есть способ динамически заполнить мою сетку результатами поиска с помощью этих элементов управления, я не могу использовать XAML для запуска. Хотя, я признаю, что, возможно, там тоже что-то не хватает. Я все еще относительно новичок в wpf. – Meloviz