5

我正在尝试根据特定的布尔值更改 WPF 应用程序中对象的 DataTemplate。当值为“True”时,我希望 DataTemplate 成为某种东西,而当该值为“False”时,我希望 DataTemplate 成为其他东西。

我试过写这段代码,但到目前为止,我得到了一个烦人的“内存不足异常”。

<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>

如果有人知道如何解决这个问题,请告诉我。

4

2 回答 2

2

我想到了。

我使用 a并通过使用sContentControl设置它来做到这一点,这是代码:StyleDataTrigger

 <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>
于 2012-07-02T14:10:30.420 回答
1

您应该能够使用数据模板选择器(请参阅DataTemplateSelector数据模板概述)并将其应用于适当的模板选择器属性(例如 Button 具有 ContentTemplateSelector 属性)。

于 2012-07-02T12:20:26.617 回答