wpf控件模板

时间:2009-07-17 14:38:57

标签: wpf templates controls controltemplate

我有一个非常简单的案例,我认为可以从使用模板中受益(但我不确定,这就是我要问的原因)。我所看到的所有模板化的例子都比我拥有更多的知识,太具体了,不像我这样对整个newb有多大用处,或者包含许多辅助性的东西,这使得很难识别出模板的一部分。 / p>

这是设置: 我有两个并排的标签,第一个标签填充了字段的名称,第二个标签填充了字段的值。

以下是我目前在我的应用中使用的XAML(很多次):

<StackPanel Style="{StaticResource horizontalStackerStyle}">
    <Label Style="{StaticResource labelStyle}">Field One:</Label>
    <Label Style="{StaticResource valueStyle}" Name="field1" 
        Content="{Binding dataObject.field1}" />
</StackPanel>

我想创建一个模板,以便我可以像这样编写XAML:

<CustomControlOrWhatever 
    FieldName="Field One:" 
    FieldValue="{Binding dataObject.field1}"/>

我有一种感觉,我可以使用某种模板来做到这一点。其中一个好处是我不需要一遍又一遍地指定样式。我对么?我该怎么做?

提前致谢!

更新:

还没有找到答案。我使用依赖属性选择了一个可能的解决方案,并尝试询问clarifying question here。好吧,第一个响应者说我实际上并不需要用DP废话来混淆我的代码,所以我再次改变它 - 它仍然无效。任何人都可以提出有效的解决方案吗?这看起来应该很简单。

需要明确的是:这只需要与每隔几秒更新一次的单向绑定。

3 个答案:

答案 0 :(得分:2)

您要求的基本上是用户控件。

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SomeNameSpace.SomeControlName">
    <Grid x:Name="LayoutRoot">
     <StackPanel Style="{StaticResource horizontalStackerStyle}">
      <Label Style="{StaticResource labelStyle}" x:Name="FieldNameLbl"></Label>
      <Label Style="{StaticResource valueStyle}" x:Name="ValueLbl">
      </StackPanel>
    </Grid>
</UserControl>

在后面的代码中,您需要公开两个用于设置控件值的属性。

public string FieldName
{
    get { return FieldNameLbl.Text; }
    set { FieldNameLbl.Text = value; }
}

public string FieldValue
{
    get { return ValueLbl.Text; }
    set { ValueLbl.Text = value; }
}

然后打电话说你可以把它放在窗口/页面的顶部,其余的声明:

xmlns:Controls="clr-namespace:SomeNameSpace" 

然后你可以将控件插入你的窗口/页面,如下所示:

<Controls:NameOfYourControl FieldName="Field One:" FieldValue="{Binding dataObject.field1}"/>

答案 1 :(得分:1)

您可以创建一个名为UserControl的{​​{1}},并为FieldControlFieldName定义支持(自动)属性。 (正常属性没问题,只要你只需要绑定一次,这可能就是这种情况。)

XAML代码可能如下所示:

FieldValue

希望有所帮助。

答案 2 :(得分:0)

您想要做的事情类似于关于使用指定路径的简单方法将图像放在按钮上的讨论,例如<Button MyImage="foo.jpg" />。请按照 this article 了解实际细节。

总结:

  • 一种显而易见的方法是创建一个包含两个标签的UserControl并公开这两个属性。这里的模板不多。

  • 最WPFish解决方案似乎是在其中一个标签上使用两个附加属性(比如值),并为其提供包含另一个标签(描述)的控件模板。在模板中,将每个标签文本绑定到相应的附加属性值。