gpt4 book ai didi

wpf - 有没有办法将绑定(bind)分配给一个值,而不是绑定(bind) XAML 中的值?

转载 作者:行者123 更新时间:2023-12-04 05:33:16 24 4
gpt4 key购买 nike

因此,假设我想以动态方式修改几个可视元素的 DataContext,并且我想将其作为 Storyboard 的一部分。我可能会这样做:

<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="SomeVisualElement" Storyboard.TargetProperty="(FrameworkElement.DataContext)" Duration="0:0:0" >
<DiscreteObjectKeyFrame KeyTime="0:0:0" >
<DiscreteObjectKeyFrame.Value>
<Binding Path="Repository.GeneratedThings[0].Element" />
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>

这具有将 DiscreteObjectKeyFrame 的值绑定(bind)到 Repository.GeneratedThings[0].Element 的效果。应用此 Storyboard 时,SomeVisualElement 的 DataContext 设置为 Repository.GeneratedThings[0].Element。我认为这相当于说:

<UserControl x:Name="SomeVisualElement" DataContext="{Binding Path="Repository.GeneratedThings[0].Element"} />

这是功能性的,但我想做的是采用某种方式使绑定(bind)仅在视觉元素中而不是在关键帧中维护。我们只有很少的视觉元素,但有很多 Storyboard 和 KeyFrames,我们注意到当我们更新 GeneratedThings 对象(而不是集合的单个元素)时,性能损失与 KeyFrames 的数量成正比。

如何设置 DiscreteObjectKeyFrame 以便 DataContext 最终正确绑定(bind)但 DiscreteObjectKeyFrame 的值未绑定(bind)?在 WPF/XAML 的上下文中,作为绑定(bind)的值和被绑定(bind)的值之间,这甚至是合理的语义区别吗?

或者,是否有另一种方法可以从 Storyboard 中更改多个可视元素的 DataContext 并且不涉及让每个 Storyboard 维护绑定(bind)?

最佳答案

假设您有以下代码:

<ObjectAnimationUsingKeyFrames Storyboard.TargetName="SomeVisualElement"  Storyboard.TargetProperty="SomeProperty" Duration="0:0:0" >
<DiscreteObjectKeyFrame KeyTime="0:0:0" Value={Binding Foo} />
</ObjectAnimationUsingKeyFrames>

这里应该注意到两个问题。
  • 每个 Storyboard 都必须维护这个 Binding。
  • 当实际运行这个 Storyboard 时,Foo 的当前值将被设置为 SomeProperty。 Foo 的后续更改不会受到影响。

  • 我建议以下。创建一些以 Foo 作为依赖属性的依赖对象。例如:
    <Grid.Resources>
    <viewModel:FooContainer Foo={Binding Foo} x:Key="FooContainer" />
    </Grid.Resources>

    在 Storyboard 中使用此容器。
    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="SomeVisualElement"  Storyboard.TargetProperty="SomeProperty" Duration="0:0:0" >
    <DiscreteObjectKeyFrame KeyTime="0:0:0" Value={StaticResource FooContainer} />
    </ObjectAnimationUsingKeyFrames>

    修改 Control 的 ContentTemplate 以便您可以绑定(bind)到 Foo 属性本身。因此,您可以将绑定(bind)而不是 Foo 的值直接传递给控件。 Storyboard 也不会受到 Foo 值变化的影响。

    关于wpf - 有没有办法将绑定(bind)分配给一个值,而不是绑定(bind) XAML 中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12308710/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com