我有一个绑定到适当ViewModel的用户控件。我在此控件上有一个GraphLayout(使用Graph#)绑定到ViewModel.Graph属性:
<graph:ProductGraphLayout Graph="{Binding Path=Graph}" />
许多包含ProductVertex的VertexControl都放在此布局上。内容由DataTemplate表示,并使用Style:
应用主题<DataTemplate x:Key="VertexTemplate" DataType="{x:Type graph:ProductVertex}">
<TextBlock Text="{Binding Path=ID, Mode=OneWay}" />
</DataTemplate>
<Style TargetType="{x:Type graphsharp:VertexControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type graphsharp:VertexControl}">
<Border>
<Border.Style>
<Style TargetType="{x:Type Border}">
<Setter Property="BorderBrush" Value="#6695C4" />
<Setter Property="BorderThickness" Value="2" />
</Style>
</Border.Style>
<ContentPresenter Content="{TemplateBinding Vertex}" ContentTemplate="{StaticResource VertexTemplate}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
如何根据ProductVertex属性更改容器的样式(VertexControl),比如IsCurrent?
答案 0 :(得分:1)
据我了解数据结构,您可以将ProductVertex
对象与ControlTemplate
的{{1}}一起使用。你现在可以,例如使用ValueConverter根据顶点对象更改边框的颜色。
VertexControl
答案 1 :(得分:1)
似乎我自己管理如何实现这一目标:
<DataTemplate x:Key="VertexTemplate" DataType="{x:Type graph:ProductSubstitutionVertex}">
<TextBlock Text="{Binding Path=ID, Mode=OneWay}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding IsCurrent}" Value="true">
<Setter Property="Background" Value="#EDF2F6" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>