WPF CustomControl切换ContentControl的内容

时间:2015-03-09 13:31:24

标签: c# wpf xaml data-binding custom-controls

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfCustomControlLibrary1">

<ContentControl x:Key="BackSide" Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Back}" RenderTransformOrigin="0.5,0.5">
    <ContentControl.RenderTransform>
        <ScaleTransform ScaleX="-1" />
    </ContentControl.RenderTransform>
</ContentControl>

<Style TargetType="{x:Type local:CustomControl1}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:CustomControl1}">
                <ContentControl Grid.Row="1">
                    <ContentControl.RenderTransform>
                        <TransformGroup>
                            <ScaleTransform x:Name="tf" ScaleX="1" />
                        </TransformGroup>
                    </ContentControl.RenderTransform>
                    <ContentControl.Style>
                        <Style TargetType="ContentControl">
                            <Setter Property="Content" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Front}" />
                            <Style.Triggers>
                                <DataTrigger Value="True">
                                    <DataTrigger.Binding>
                                        <Binding ElementName="tf" Path="ScaleX">
                                            <Binding.Converter>
                                                <loc:LessThanXToTrueConverter X="0" />
                                            </Binding.Converter>
                                        </Binding>
                                    </DataTrigger.Binding>
                                    <DataTrigger.Setters>
                                        <Setter Property="Content" Value="{StaticResource BackSide}"/>
                                    </DataTrigger.Setters>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </ContentControl.Style>
                </ContentControl>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

这是来自customcontrol的一些XAML代码。哪里有两个依赖属性(Front和Back)。

通过我的DataTrigger我想改变ContentControl的内容,使用&#34; Front&#34;使用&#34;返回&#34;。 首先,它显示了依赖属性&#34; Front&#34;然后它应该使用depencency属性&#34;返回&#34;作为内容。 这可以通过以下代码完成:

<DataTrigger.Setters>
  <Setter Property="Content" Value="{StaticResource BackSide}"/>
</DataTrigger.Setters>

但这不起作用......

我可以通过以下方式绑定并显示我的控件中Front依赖项属性的内容:

<Setter Property="Content" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Front}" />

但是我无法弄清楚如何绑定DataTrigger设置器,以便它使用ContentControl的内容和x:Key =&#34; BackSide&#34; ContentControl中。

提前致谢。

1 个答案:

答案 0 :(得分:0)

你说这个XAML有效:

<Setter Property="Content" Value="{Binding RelativeSource={RelativeSource 
    TemplatedParent}, Path=Front}" />

那么为什么不尝试将此XAML放入DataTrigger?:

<Setter Property="Content" Value="{Binding RelativeSource={RelativeSource 
    TemplatedParent}, Path=Back}" />

更新&gt;&gt;&gt;

我不确定你要对UIElement DependencyProperty做什么,但我猜你采取了错误的做法。通常在WPF中,我们的属性是数据类型,而不是 UI 类型,然后我们使用DataTemplate生成UI类型...也许你应该重新思考你的方法

请参阅MSDN上的Data Templating Overview页面以获取进一步的帮助。

您可能还会发现我对WPF MVVM navigate views问题的回答有助于阅读。