首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wpf控件模板

wpf控件模板
EN

Stack Overflow用户
提问于 2009-07-17 14:38:57
回答 2查看 915关注 0票数 2

我有一个非常简单的案例,我认为可以从使用模板中获益(但我不确定,这就是我问的原因)。我见过的所有模板示例要么假设比我拥有的知识更多,要么太具体,对像我这样的新手没有太大用处,要么包含许多辅助内容,使得很难识别模板的一部分。

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

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

代码语言:javascript
复制
<StackPanel Style="{StaticResource horizontalStackerStyle}">
    <Label Style="{StaticResource labelStyle}">Field One:</Label>
    <Label Style="{StaticResource valueStyle}" Name="field1" 
        Content="{Binding dataObject.field1}" />
</StackPanel>

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

代码语言:javascript
复制
<CustomControlOrWhatever 
    FieldName="Field One:" 
    FieldValue="{Binding dataObject.field1}"/>

我有一种感觉,我可以用某种模板来做这件事。这样做的一个好处是我不需要一遍又一遍地指定样式。我说的对吗?我该怎么做呢?

提前感谢!

更新:

仍然没有找到这个问题的答案。我使用依赖属性选择了一个可能的解决方案,并尝试询问clarifying question here。好的,第一个响应者说我实际上不需要把我的代码弄得乱七八糟,所以我又改了一次--它仍然不起作用。有人能想出一个可行的解决方案吗?这看起来应该很简单。

需要说明的是:这只需要是单向绑定,值每隔几秒钟更新一次。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-17 14:48:03

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

代码语言:javascript
复制
<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>

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

代码语言:javascript
复制
public string FieldName
{
    get { return FieldNameLbl.Text; }
    set { FieldNameLbl.Text = value; }
}

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

然后调用它,你可以把这个放在你的窗口/页面的顶部,还有你的其余声明:

代码语言:javascript
复制
xmlns:Controls="clr-namespace:SomeNameSpace" 

然后你可以像这样将控件插入到你的窗口/页面中:

代码语言:javascript
复制
<Controls:NameOfYourControl FieldName="Field One:" FieldValue="{Binding dataObject.field1}"/>
票数 2
EN

Stack Overflow用户

发布于 2009-07-17 14:48:15

您可以创建一个名为FieldControlUserControl,并为FieldNameFieldValue定义支持(自动)属性。(只要您只需要绑定一次,普通属性就可以了,很可能就是这样。)

XAML代码可能如下所示:

代码语言:javascript
复制
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Class="foo.bar">
    <StackPanel Style="{StaticResource horizontalStackerStyle}">
        <Label Style="{StaticResource labelStyle}" Content="{Binding Path=FieldName, Mode=OneTime, StringFormat='{0}: '}"/>
        <Label Style="{StaticResource valueStyle}" Content="{Binding Path=FieldValue, Mode=OneTime}" />
    </StackPanel>
</UserControl>

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1143687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档