【问题标题】:Can WPF Controls be re-used?可以重用 WPF 控件吗?
【发布时间】:2010-06-23 22:47:20
【问题描述】:

例如,我创建了一个带有复选标记的按钮。我需要在窗口的几个地方使用它。

<Button Width="25">
    <!-- Draw a Green checkmark -->
    <Polyline Points="2,5,6,10,13,1" Stroke="Green" StrokeThickness="4" StrokeLineJoin="Round" StrokeStartLineCap="Round" StrokeEndLineCap="Round" />
</Button>

由于我只想更改内容,我不确定样式或模板是否适用。我需要创建一个 UserControl 吗?

编辑:这可以通过样式来完成。但是,我只想更改内容,不想覆盖当前样式。

【问题讨论】:

  • 你最好可以在这里使用一种样式,这样你就不必在有变化的时候去改变你所有的按钮。

标签: .net wpf .net-4.0


【解决方案1】:

如果您想为其添加某种动态功能(即添加新属性),请使用您创建的按钮的内容创建一个 UserControl。如果您只有一个具有视觉外观的按钮可以进行检查,那么我会使用样式。

【讨论】:

    【解决方案2】:

    这需要一种风格。将以下样式添加到您的 Window.Resources:

    <style TargetType="Button" x:Key="tick">
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <Polyline Points="2,5,6,10,13,1" Stroke="Green" StrokeThickness="4" StrokeLineJoin="Round" StrokeStartLineCap="Round" StrokeEndLineCap="Round" />
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    

    然后您可以将按钮定义为:

    <Button Width="25" Style="{StaticResource tick}" />
    

    【讨论】:

    • 此特定样式满足要求,但它会丢弃使用该样式为按钮提供的任何内容。这是一个很好的解决方案,但是您可以随时修改模板以在以后包含 ContentPresenter。例如,您可以创建一个水平 StackPanel,其中 Polyline 后跟 ContentPresenter,现在您可以选择将文本(或任何其他内容)附加到任何“勾选”样式按钮。
    • 这是一个非常好的观点 - 我确实努力对此作出裁决。添加内容演示者将是一个不错的功能。
    • 谢谢。但是我的整个应用程序已经应用了样式。当我应用这种风格时,我失去了这一切。有没有办法解决这个问题?
    • @TheSean,您可以使用 Style 的 BasedOn 属性来使用另一种样式作为基础。见:msdn.microsoft.com/en-us/library/…
    • 我不知道设计时的主题,所以它需要是动态的。根据我的阅读,这似乎是不可能的。
    【解决方案3】:

    使用您创建的按钮的内容创建一个 UserControl。创建用户控件最简单的方法是使用 Expression Blend。选择您要为其创建 UserControl 的所有控件。右键单击并选择“进入用户控件”。而已。只需拖放即可在项目中的任何位置使用此控件。

    希望对你有帮助

    萨加尔·阿亚兹

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 2011-01-31
      相关资源
      最近更新 更多