для UserControl
я объявлен DependencyProperty
:Пользовательские DependencyProperty на Style.Trigger
public static readonly DependencyProperty DeselectedPresentationModeProperty =
DependencyProperty.Register(
"DeselectedPresentationMode",
typeof(int),
typeof(MyUserControl),
new FrameworkPropertyMetadata(1,FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public static readonly DependencyProperty SelectedPresentationModeProperty =
DependencyProperty.Register(
"SelectedPresentationMode",
typeof(int),
typeof(MyUserControl),
new FrameworkPropertyMetadata(1, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
Теперь я хочу, чтобы использовать эти свойства в MultiTrigger:
<Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}" x:Key="MyUserControlItemStyle">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="False" />
<Condition Property="gui:MyUserControl.DeselectedPresentationMode" Value="0" />
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="ContentTemplate" Value="{StaticResource PresentationModeIconOnly}" />
</MultiTrigger.Setters>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="False" />
<Condition Property="gui:MyUserControl.DeselectedPresentationMode" Value="1" />
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="ContentTemplate" Value="{StaticResource PresentationModeSimple}" />
</MultiTrigger.Setters>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="True" />
<Condition Property="gui:MyUserControl.SelectedPresentationMode" Value="0" />
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="ContentTemplate" Value="{StaticResource PresentationModeExtended}" />
</MultiTrigger.Setters>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="True" />
<Condition Property="gui:MyUserControl.SelectedPresentationMode" Value="1" />
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="ContentTemplate" Value="{StaticResource PresentationModeIconOnly}" />
</MultiTrigger.Setters>
</MultiTrigger>
</Style.Triggers>
</Style>
...
...
<ListBox ... ItemContainerStyle="{StaticResource MyUserControlItemStyle}"/>
Но если я использую MyUserControl еще один проект, нет реакции, если я изменю свой DependencyProperty
. использовать ли я xaml
например:
<Window
...
x:Class="WpfControlsTester.MainWindow"
Title="MainWindow">
<Grid>
<GUI:MyUserControl Name="test"/>
<Slider Minimum="0" Maximum="1" Value="{Binding SelectedPresentationMode, ElementName=test}" />
<Slider Minimum="0" Maximum="1" Value="{Binding DeselectedPresentationMode, ElementName=test}" />
</Grid>
или если я использую любой вид манипулирования значение как this.test.DeselectedPresentationMode = 0;
на событие или еще чего-л.
Я использовал WPF Inspector для «отладки» моих триггеров, и оба свойства всегда имели значение по умолчанию (1). Где моя ошибка или что я должен добавить для обновления моих триггеров?
Edit: Изменено ложь «MyControl в„MyUserControl“
Спасибо большое, это сработало для меня. Я также пробовал MultiDataTrigger, но я получаю исключение, например «Свойство» - привязка не должна быть нулевой. Возможно, я реализовал это неправильно :-) – Kooki