Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 在多重绑定中是否可以使用DynamicSource?_Wpf_Multibinding_Markup Extensions_Dynamicresource - Fatal编程技术网

Wpf 在多重绑定中是否可以使用DynamicSource?

Wpf 在多重绑定中是否可以使用DynamicSource?,wpf,multibinding,markup-extensions,dynamicresource,Wpf,Multibinding,Markup Extensions,Dynamicresource,在本例中,我希望使用资源字典中声明的字符串作为Text属性绑定的一部分。仅绑定单个动态资源字符串不是问题: <TextBlock Text="{DynamicResource keyToMyString}" /> 但是,当需要将动态资源绑定到属性时,这没有帮助。是否可以通过(创造性地,如果必要的话)使用现有的标记扩展(如x:Static等)来实现这一点?或者我们必须编写自己的标记扩展才能实现这一点 动态资源引用有一些明显的限制。必须至少满足以下条件之一: 正在设置的属性必须是Fr

在本例中,我希望使用资源字典中声明的字符串作为
Text
属性绑定的一部分。仅绑定单个动态资源字符串不是问题:

<TextBlock Text="{DynamicResource keyToMyString}" />
但是,当需要将动态资源绑定到属性时,这没有帮助。是否可以通过(创造性地,如果必要的话)使用现有的标记扩展(如
x:Static
等)来实现这一点?或者我们必须编写自己的标记扩展才能实现这一点

动态资源引用有一些明显的限制。必须至少满足以下条件之一:

  • 正在设置的属性必须是
    FrameworkElement
    FrameworkContentElement
    上的属性。该属性必须由
    DependencyProperty
    支持
  • 该参考用于
    样式
    设置器
    中的值
  • 要设置的属性必须是
    Freezable
    上的属性,该属性作为
    FrameworkElement
    FrameworkContentElement
    属性或
    Setter
    值提供

因此,如果使用
绑定
,所有语句都会被违反

如图所示,
DynamicResourceExtension
对于
Run
类的一个实例工作得很好,因为
Run
类(至少)是从
FrameworkContentElement
类派生的

其他参考资料
  • 资源部分:

  • 可能重复:。可能重复:请注意:虽然两个建议的重复项本身都很有趣,但它们应该被视为稍微相关,而不是重复。
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0} {1} some more text">
            <Binding Source="{x:Static Resources:Strings.string1}" />
            <Binding Source="{x:Static Resources:Strings.string2}" />
        </MultiBinding>
    <TextBlock.Text>
    
    <TextBlock >
        <Run Text="{DynamicResource CompanyName}" />
        <Run Text="{DynamicResource ProductName}" />
        <Run Text="{DynamicResource MajorVersion}" />
    </TextBlock>