Car*_*ine 6 c# wpf xaml ivalueconverter
我有一个ValueConverter用于绑定StoryBoard动画中的'To'Value,类似于答案 - WPF动画:绑定到storyboard动画的"To"属性.
问题是我MultiBinding ValueConverter在几个地方重复下面的代码.
<MultiBinding Converter="{StaticResource multiplyConverter}">
<Binding Path="ActualHeight" ElementName="ExpanderContent"/>
<Binding Path="Tag" RelativeSource="{RelativeSource Self}" />
</MultiBinding>
Run Code Online (Sandbox Code Playgroud)
我想通过将结果存储ValueConverter到资源变量来删除此重复代码,以便我可以将此本地变量直接绑定到故事板.
<system:Double x:Key="CalculatedWidth">
<MultiBinding Converter="{StaticResource multiplyConverter}">
<Binding Path="ActualHeight" ElementName="ExpanderContent"/>
<Binding Path="Tag" RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</system:Double >
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
"Double"类型不支持直接内容.
无法将内容添加到"Double"类型的对象.
我觉得这是一个常见问题,但无法找到解决方案来消除这种冗余.
更新
谢谢Rohit,你的答案解决了这个问题.但我还有一个相关的问题,所以更新问题.这个变量CalculatedWidth在正常情况下工作正常,但是当它在RenderTransform中使用时,它不会获取值.即如果我使用正常的方式使用转换器它可以工作,但它不会获取变量.
<StackPanel.RenderTransform>
<TranslateTransform x:Name="SliderTransform">
<TranslateTransform.X>
<Binding Converter="{StaticResource PanelConverter}" ElementName="SliderPanel" Path="ActualWidth" /> // Works
<Binding Path="Width" Source="{StaticResource CalculatedWidth}"/> // Doesn't Work
</TranslateTransform.X>
</TranslateTransform>
</StackPanel.RenderTransform>
Run Code Online (Sandbox Code Playgroud)
我将变量保留为本地资源的一部分.这是否意味着在调用Render变换时不会创建变量?
正如错误所示,您无法与 Double 绑定。绑定只能通过依赖属性来完成。
相反,在资源中使用FrameworkElement并绑定其宽度( DP),如下所示:
<FrameworkElement x:Key="CalculatedWidth">
<FrameworkElement.Width>
<MultiBinding Converter="{StaticResource multiplyConverter}">
<Binding Path="ActualHeight" ElementName="ExpanderContent"/>
<Binding Path="Tag" RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</FrameworkElement.Width>
</FrameworkElement>
Run Code Online (Sandbox Code Playgroud)
您可以像本示例中那样绑定此资源:
<TextBlock Width="{Binding Width, Source={StaticResource CalculatedWidth}}"/>
Run Code Online (Sandbox Code Playgroud)