【问题标题】:How to call a Style Property setter of another property that is set in in the same style in xaml如何调用在 xaml 中以相同样式设置的另一个属性的样式属性设置器
【发布时间】:2015-05-12 15:35:39
【问题描述】:

我正在用户控件中编写样式以控制轴集合中单个轴的样式。这一切都有效,但现在我想集成 AxisTitle 的旋转。
但如果我执行以下操作(仅显示标题设置器):

<UserControl.Resources>
<Style x:Key="AxisStyle" TargetType="myLib:AxisBase">
    <Setter Property="AxisTitle" Value="{Binding Title, Mode=OneWay}" />
    <Setter Property="RenderTransform">
        <Setter.Value>
            <RotateTransform Angle="90" />
        </Setter.Value>
    </Setter>
</Style>
</UserControl.Resources>

然后将旋转应用于轴基,它是所有轴,而不仅仅是标题。 (我明白为什么)
但是如何更改代码以使此 RenderTransform 应用于 AxisTitle?

如果我对特定的轴实例执行以下操作,会发生什么:

<Resources>
    <Style x:Key="AxisTitleStyle" TargetType="myLib:AxisTitle">
        <Setter Property="RenderTransform">
            <Setter.Value>
                <RotateTransform Angle="90" />
            </Setter.Value>
        </Setter>
    </Style>
</Resources>

<Axis Style="{StaticResource AxisTitleStyle>/>

但是我想把它放到AxisBase的样式里面来设置标题的样式。
问:这可能吗?

这只是我最终想要实现的第一步。像这样的属性依赖旋转(伪代码):

<Style.Triggers>
    <DataTrigger Binding="{Binding Path=Axis.RotateTitle}" Value="True">
        <Setter Property="RenderTransform">
            <Setter.Value>
                <RotateTransform Angle="90" />
            </Setter.Value>
        </Setter>
    </DataTrigger>

    <DataTrigger Binding="{Binding Path=Axis.RotateTitle}" Value="False">
    <!-- Do nothing -->
    </DataTrigger>
</Style.Triggers>

但首先我必须了解如何将 RenderTransform 设置为 Style 内的 AxisTitle。

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    当然,我必须查看 Axis 可视化树才能确定您想要什么,但听起来您想将转换应用于绑定到 Axis 内的轴标题的 xaml 元素。毫无疑问,Axis 是一个可视化树,您可以使用 Blend 轻松拆分(编辑现有模板)。

    拥有完整的现有 Axis 样式模板后,您可以调整实际引用/绑定到标题的位,以便可以动态应用转换。希望对您有所帮助...

    【讨论】:

    • 它是第 3 方控件。 Blend 和 Studio 不会为 Axis 创建模板。仅适用于控件本身。我找不到任何轴。
    • 不管是谁创建的控件,都有一个Axis的可视化树对吧?您可以使用 Snoop 查看它。无论如何,您都可以使用 Blend 提取样式。所有这一切都假设 Axis 是一个 wpf 控件...
    • 我偶然发现了要设置的属性。它是 TitleStyle,我让它工作。有了这些知识,我在 Snoop 中搜索了它(仍然无法让 Blend 做你所说的,但可能是因为它是我第一次使用它:))。从我现在看到的情况来看,我无法推断出如何以我现在的方式正确地做到这一点。只有凭借我现在拥有的知识,我才能在窥探中找到它。注意:我对 WPF 比较陌生。
    • 嗯,这就是 Snoop 的用途 :) 很高兴你找到了让它工作的方法。
    猜你喜欢
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 2014-10-28
    • 2012-02-18
    • 1970-01-01
    相关资源
    最近更新 更多