对于UserControl
我声明了DependencyProperty
:
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)。我的错误在哪里或者我应该添加什么来更新我的触发器?
编辑:将错误的“MyControl”更改为“MyUserControl”
答案 0 :(得分:1)
此可能只是一个复制和粘贴错误,但在您声明Dependency Properties
的代码示例中,您的控件名为MyUserControl
,但在其他代码中例如,它被称为MyControl
。如果您希望这样做,这些名称需要匹配。
更新&gt;&gt;&gt;
好吧,我认为可能就是这样......所以,继续......如果你只是绑定它,你能看到属性值吗?
<TextBlock Text="{Binding SelectedPresentationMode, ElementName=test}" />
如果可以,那么我们可以继续...通常当绑定不起作用时,有一行以单词Error
开头输出到Visual Studio中的Output Window
。你的错误说了什么。如果你有一个? (您可能需要通过转到工具&gt;选项&gt;调试&gt;输出窗口&gt; WPF跟踪设置并将Data Binding
选项设置为Warning
来启用此功能或Error
。)
如果输出窗口中没有错误,则调试起来可能比较棘手。让我知道。
答案 1 :(得分:1)
您可以尝试使用MultiDatatrigger,以便进行属性更改:
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="False" />
<Condition Binding="{Binding DeselectedPresentationMode, RelativeSource={RelativeSource AncestorType={x:Type MyUserControl}}}" Value="0" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="ContentTemplate" Value="{StaticResource PresentationModeIconOnly}" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
由于