gpt4 book ai didi

wpf - 将 adorner 属性绑定(bind)到 viewmodel 属性

转载 作者:行者123 更新时间:2023-12-03 10:45:21 24 4
gpt4 key购买 nike

我需要根据 View 模型的属性显示(或不显示)装饰器。

我的看法是这样的:

<ItemsControl x:Name="Items">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding Path=X}" />
<Setter Property="Canvas.Top" Value="{Binding Path=Y}" />
<Setter Property="Width" Value="{Binding Path=Width}" />
<Setter Property="Height" Value="{Binding Path=Height}" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<AdornerDecorator>
<Border x:Name="DraggableBorder" Background="{Binding Path=BackgroundColor}">
<!-- contents -->

<i:Interaction.Behaviors>
<behaviors:DragOnCanvasBehavior DraggableItem="{Binding}">
<behaviors:DragOnCanvasBehavior.MouseOverAdornerTemplate>
<DataTemplate>
<Border DataContext="DraggableBorder"
BorderBrush="#B0000000"
Width="{Binding Path=Width}"
Height="{Binding Path=Height}" />
</DataTemplate>
</behaviors:DragOnCanvasBehavior.MouseOverAdornerTemplate>
<behaviors:DragOnCanvasBehavior.SelectedAdornerTemplate>
<DataTemplate>
<Border DataContext="DraggableBorder"
BorderBrush="#FF34619E"
Width="{Binding Path=Width}"
Height="{Binding Path=Height}"
Visibility="{Binding Path=Selected,
ElementName=DraggableBorder,
Converter={StaticResource BooleanToVisibilityConverter}}" />
</DataTemplate>
</behaviors:DragOnCanvasBehavior.SelectedAdornerTemplate>
</behaviors:DragOnCanvasBehavior>
</i:Interaction.Behaviors>
</Border>
</AdornerDecorator>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

并且该行为将鼠标事件附加到适当的方法,并显示/隐藏鼠标在装饰器上。

鼠标悬停/移出事件和装饰器工作正常,但选择装饰器给我带来了一些麻烦。因为应该只选择一项,所以我想依靠 Selected View 模型的属性。我假设上面示例中的内容会起作用(我尝试了几个版本),但可惜,事实并非如此。

我应该如何写我的 Visibility属性(property) ?

此处提供完整代码: https://github.com/cosmo0/DragSnap/tree/adorners

最佳答案

Visibility 绑定(bind)与 DraggableBorder 的属性“Selected”绑定(bind),该属性不存在。

此外,边框有一个 DataContext="DraggableBorder"在这种情况下,它是一个简单的字符串。

因此,请在边框上使用以下属性:

    <Border DataContext="{Binding DataContext, ElementName=DraggableBorder}" Visibility="{Binding Selected, Converter=...}"/>

关于wpf - 将 adorner 属性绑定(bind)到 viewmodel 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28093856/

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