我需要根据视图模型的属性显示(或不显示)装饰。
我的观点是这样的:
<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>
此行为将鼠标事件附加到正确的方法,并将鼠标显示/隐藏在装饰器上。
鼠标过度/自动事件和装饰工作正常,但选择装饰者会给我带来一些麻烦。因为只应选择一个项目,所以我希望依赖于viewmodel的Selected
属性。我假设上面的示例中的内容可行(我尝试了几个版本),但唉,它不是。
我应该如何撰写我的Visibility
财产?
答案 0 :(得分:0)
可见性绑定与属性绑定&#39;已选择&#39; DraggableBorder,不存在。
此外,边框有一个DataContext =&#34; DraggableBorder&#34;在这种情况下,它是一个简单的字符串。
因此,请在边框上使用以下属性:
<Border DataContext="{Binding DataContext, ElementName=DraggableBorder}" Visibility="{Binding Selected, Converter=...}"/>