Jon*_*rry 5 c# wpf templating datatrigger datatemplate
我试图根据特定的布尔值更改WPF应用程序中对象的DataTemplate。当值为“ True”时,我希望数据模板为某些东西;当值为“ False”时,我希望数据模板为其他东西。
我曾尝试编写此代码,但到目前为止,我最终遇到了一个烦人的“内存不足异常”。
<DataTemplate DataType="{x:Type vm:MyObjectViewModel}">
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Visible}" Value="False">
<Setter TargetName="MainTemplateGrid" Property="Content">
<Setter.Value>
<Ellipse Width="50" Height="50" Fill="Red" />
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Visible}" Value="True">
<Setter TargetName="MainTemplateGrid" Property="Content">
<Setter.Value>
<Image Source="{Binding Icon}" Opacity="{Binding Visible, Converter={StaticResource VisibilityConverter}}" />
</Setter.Value>
</Setter>
</DataTrigger>
</DataTemplate.Triggers>
<ContentControl x:Name="MainTemplateGrid" />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
如果有人对如何解决此问题有任何了解,请告诉我。
我想到了。
我使用 a 来完成此操作ContentControl,并Style使用DataTriggers 设置它,代码如下:
<DataTemplate DataType="{x:Type vm:MyControlViewModel}">
<ContentControl>
<ContentControl.ToolTip>
<!-- TOOLTIP CODE GOES HERE -->
</ContentControl.ToolTip>
<ContentControl.InputBindings>
<!-- INPUT BINDINGS CODE GOES HERE -->
</ContentControl.InputBindings>
<ContentControl.ContextMenu>
<!-- CONTEXT MENU CODE GOES HERE -->
</ContentControl.ContextMenu>
<ContentControl.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="Visibility" Value="0">
<Setter Property="ContentControl.Content">
<Setter.Value>
<Ellipse Width="50" Height="50" Opacity="0.5">
<Ellipse.Fill>
<LinearGradientBrush>
<GradientStopCollection>
<GradientStop Color="Red" Offset="0" />
<GradientStop Color="DarkRed" Offset="0.8" />
</GradientStopCollection>
</LinearGradientBrush>
</Ellipse.Fill>
</Ellipse>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="Visibility" Value="100">
<Setter Property="ContentControl.Content">
<Setter.Value>
<Image Source="{Binding Icon}" Opacity="{Binding Visible, Converter={StaticResource VisibilityConverter}}" />
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)