c# – 将ValueConverter存储到变量

前端之家收集整理的这篇文章主要介绍了c# – 将ValueConverter存储到变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个ValueConverter用于在StoryBoard动画中绑定’To’Value,类似于答案- WPF animation: binding to the “To” attribute of storyboard animation.

问题是我在几个地方重复MultiBinding ValueConverter的下面一段代码.

  1. <MultiBinding Converter="{StaticResource multiplyConverter}">
  2. <Binding Path="ActualHeight" ElementName="ExpanderContent"/>
  3. <Binding Path="Tag" RelativeSource="{RelativeSource Self}" />
  4. </MultiBinding>

我想通过将ValueConverter的结果存储到资源变量来删除此重复代码,以便我可以将此本地变量直接绑定到故事板.

  1. <system:Double x:Key="CalculatedWidth">
  2. <MultiBinding Converter="{StaticResource multiplyConverter}">
  3. <Binding Path="ActualHeight" ElementName="ExpanderContent"/>
  4. <Binding Path="Tag" RelativeSource="{RelativeSource Self}" />
  5. </MultiBinding>
  6. </system:Double >

我收到以下错误

The type ‘Double’ does not support direct content.

Cannot add content to an object of type “Double”.

我觉得这是一个常见问题,但无法找到解决方案来消除这种冗余.

更新

谢谢Rohit,你的答案解决了这个问题.但我还有一个相关的问题,所以更新问题.此变量CalculatedWidth在正常情况下工作正常,但在RenderTransform中使用它时,它不会获取该值.即如果我使用正常的方式使用转换器它可以工作,但它不会获取变量.

  1. <StackPanel.RenderTransform>
  2. <TranslateTransform x:Name="SliderTransform">
  3. <TranslateTransform.X>
  4. <Binding Converter="{StaticResource PanelConverter}" ElementName="SliderPanel" Path="ActualWidth" /> // Works
  5. <Binding Path="Width" Source="{StaticResource CalculatedWidth}"/> // Doesn't Work
  6. </TranslateTransform.X>
  7. </TranslateTransform>
  8. </StackPanel.RenderTransform>

我将变量保留为本地资源的一部分.这是否意味着在调用Render变换时不会创建变量?

解决方法

由于错误提示您无法与Double绑定.绑定只能使用Dependency属性完成.

而是在资源中使用FrameworkElement并绑定其宽度(DP),如下所示:

  1. <FrameworkElement x:Key="CalculatedWidth">
  2. <FrameworkElement.Width>
  3. <MultiBinding Converter="{StaticResource multiplyConverter}">
  4. <Binding Path="ActualHeight" ElementName="ExpanderContent"/>
  5. <Binding Path="Tag" RelativeSource="{RelativeSource Self}" />
  6. </MultiBinding>
  7. </FrameworkElement.Width>
  8. </FrameworkElement>

你可以像这个样本一样绑定这个资源:

  1. <TextBlock Width="{Binding Width,Source={StaticResource CalculatedWidth}}"/>

猜你在找的C#相关文章