我有一个非常简单的案例,我认为可以从使用模板中获益(但我不确定,这就是我问的原因)。我见过的所有模板示例要么假设比我拥有的知识更多,要么太具体,对像我这样的新手没有太大用处,要么包含许多辅助内容,使得很难识别模板的一部分。
设置如下:我有两个并排的标签,第一个标签填充字段的名称,第二个标签填充字段的值。
下面是我目前在应用程序中使用的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。好的,第一个响应者说我实际上不需要把我的代码弄得乱七八糟,所以我又改了一次--它仍然不起作用。有人能想出一个可行的解决方案吗?这看起来应该很简单。
需要说明的是:这只需要是单向绑定,值每隔几秒钟更新一次。
发布于 2009-07-17 14:48:03
您所要求的基本上是一个用户控件。
<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}"/>发布于 2009-07-17 14:48:15
您可以创建一个名为FieldControl的UserControl,并为FieldName和FieldValue定义支持(自动)属性。(只要您只需要绑定一次,普通属性就可以了,很可能就是这样。)
XAML代码可能如下所示:
<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>希望这能有所帮助。
https://stackoverflow.com/questions/1143687
复制相似问题