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

私はそれを考え出した。

を使用してこれを行い、s を使用してContentControl設定したコードは次のとおりです。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 に答える