【问题标题】:WPF using style that contains another styleWPF 使用包含另一种样式的样式
【发布时间】:2015-12-15 03:12:30
【问题描述】:

我正在尝试制作可重复使用的进度条样式。

所以这里的想法很简单。我已经有了目标类型 ProgressBar 的样式,它只是一个旋转的圆圈,从 0-100% 填充。但是,为了使其可重用和模块化,我不想对随附的文本进行硬编码 - 它应该是可选的。

所以我想创建另一种包含文本“正在下载... X/Y MB”的样式。为此,我为 X 取值,为 Y 取最大值,为单位取标签。我想为左侧的图形部分包含相同的旋转圆圈。我怎样才能做到这一点?使用 BasedOn 属性,我认为您只能将已经存在的内容设置为不同。如果我想添加其他元素(如本例中的文本块)怎么办?

【问题讨论】:

  • 简单回答:关键是BasedOn属性

标签: c# wpf xaml


【解决方案1】:

如果只有文本值不同,那么在样式中,您可以将属性的值绑定到父属性(如 Tag),在每个样式或元素中,您可以根据特定要求对其进行调整。

 <Window.Resources>
    <Style x:Key="FirstButtonStyle" TargetType="Button">
        <Setter Property="Content" Value="1"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <ContentPresenter/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style x:Key="SecondButtonStyle" TargetType="Button" BasedOn="{StaticResource FirstButtonStyle}">
        <Setter Property="Content" Value="2"/>
    </Style>
</Window.Resources>

<StackPanel>
    <Button Style="{StaticResource FirstButtonStyle}"/>
    <Button Style="{StaticResource SecondButtonStyle}"/>
</StackPanel>

结果是 1 和 2。

如果您的意图是在样式中注入一些 UI 元素,那么没有这样的选项,唉。风格需要重新改写。

【讨论】:

  • 我明白了。我的意图是能够在它的任何一侧添加任何内容,基本上有另一个控件可以使用我为这个元素所做的所有动画。它将是另一个控件的一部分。
  • 我可以将这个动画进度圈注入到另一个带有 contentcontrol 的控件中吗?
  • 我不明白你的意思。你能详细说明一下吗?
猜你喜欢
  • 2016-06-01
  • 1970-01-01
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
相关资源
最近更新 更多