【发布时间】:2013-06-21 14:13:45
【问题描述】:
我正在创建一个应用程序,用于在单个窗口中编辑大量产品规格。
我有一堆尺寸(以英寸为单位),我想创建一个简单的模板,该模板将针对每个尺寸显示分数和十进制值的值。 它基本上是一个TextBlock,和两个TextBox。
但我不知道如何指定 TextBlock 的文本(在本例中为宽度)。
我希望能够在 ContentControl 声明(或类似声明)中指定它。
这是我的数据模板:
<Window.Resources>
<DataTemplate x:Key="InchesInputTemplate">
<StackPanel>
<TextBlock Text="{Binding}" /> <!-- How should I define the binding ? -->
<TextBox Text="{Binding RelativeSource={RelativeSource AncestorType=ContentControl}, Path=Content, Converter=InchesToFractionConverter}" />
<TextBox Text="{Binding RelativeSource={RelativeSource AncestorType=ContentControl}, Path=Content}" />
</StackPanel>
</DataTemplate>
</Window.Resources>
然后我在 ContentControl 中使用它:
<ContentControl Content="{Binding Width}"
ContentTemplate="{StaticResource InchesInputTemplate}"
LabelText="Width :" />
还有我的简化产品类(它将包含更多维度):
public class Product
{
private string _productCode;
public string ProductCode
{
get { return _productCode; }
set { _productCode = value; }
}
private float _width;
public float Width
{
get { return _width; }
set { _width = value; }
}
}
为我的每个维度指定标签文本的最佳方法是什么(在我的示例中为 LabelText 属性)?
【问题讨论】:
-
您要绑定的 Inches 属性在哪里?浮动宽度属性与您绑定到内容的属性不同吗?如果您将复杂对象(具有 Inches 属性)作为 Content 传递,您可以在其上添加更多属性并在模板内绑定到它们。
-
@John Bowen 你是对的,我在这里犯了一个错误。起初我想为我的尺寸制作一个复杂的对象,但我意识到这不是必需的。我更正了绑定表达式。
-
这更有意义,但新的绑定是不必要的复杂。父控件的 Content 已经是模板中的 DataContext 所以你可以使用 {Binding Converter=InchesToFractionConverter}