DataTemplate作为具有可自定义绑定的资源

时间:2013-04-29 13:34:30

标签: .net wpf xaml data-binding datatemplate

我有一个DataTemplate,我用它来表示符号的值,如下所示:

<DataTemplate>
    <TextBlock VerticalAlignment="Center">
        <TextBlock.Text>
            <MultiBinding StringFormat="{}{0:G} {1}">
                <Binding Path="DisplayValue" />
                <Binding Path="UnitSymbol" />
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
</DataTemplate>

此模板在我的XAML中经常重复,具有不同的绑定(即DisplayValueUnitSymbol不同)。我想创建一个DataTemplate作为资源并更改绑定,例如像ItemTemplate="{StaticResource MyUnitTemplate, ValuePath=DisplayValue, UnitPath=UnitSymbol}"这样的东西。我怎样才能做到这一点?

请注意!我意识到我可以创建一个自定义数据类型,它保存一个单位的值并为这种类型创建一个模板,但我很好奇是否可以使用上面提到的资源。

1 个答案:

答案 0 :(得分:0)

你可以很容易地完成你想要的任务。首先,将您的DataTemplate放在某个地方的资源字典中(或者您可以将它放在Windows或UserControl Resources部分中)。

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<DataTemplate x:Name="TextBoxStyle">
<TextBlock VerticalAlignment="Center">
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0:G} {1}">
            <Binding Path="DisplayValue" />
            <Binding Path="UnitSymbol" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

然后,在您的usercontrol中,引用资源库。

    <UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/SialTPChat.UI.Design;component/Styles/ResourceDic.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </UserControl.Resources>

现在,您可以在此用户控件中的任何位置使用它,并且可以将文本框的ItemsSource设置为您想要的任何内容。 IE,

   <TextBlock Style="{StaticResource TextBoxStyle}" /> //Set the ItemsSource to anything