如何使这个Border Silverlight元素的底部边框在红色实线内部有一个红色点?
Border border = new Border();
border.CornerRadius = new CornerRadius(5);
border.BorderThickness = new Thickness(0, 0, 0, 1);
border.BorderBrush = new SolidColorBrush(Colors.Red);
Run Code Online (Sandbox Code Playgroud) 听起来很简单?我有一个TreeView,我希望在扩展其中一个节点时发生一些事情.我正在使用MVVM,因此'something'是ViewModel中的命令.
好吧,我发现它毕竟不是那么简单.我环顾四周,尝试了一些事情.例如,使用MVVM Light的EventToCommand:
<i:Interaction.Triggers>
<i:EventTrigger EventName="TreeViewItem.Expanded">
<cmd:EventToCommand Command="{Binding Path=FolderNodeToggledCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)
此代码(基于此和此)不起作用(没有触发;命令绑定在ViewModel中,但在展开节点时永远不会触发相应的方法).我也试过替换cmd:EventToCommand,i:InvokeCommandAction结果是一样的.第二个链接中的"解决方案"显然有点过分,我不想更改ToggleButton,因为我想使用具有自己的ToggleButton 的WPF TreeView WinForms Style.第二个链接中的第二个答案表明我可能正在尝试在TreeView上使用不存在的事件.
另一种可能的解决方案是绑定TreeViewItem的IsExpanded属性.但是我想将我绑定的对象保持为干净的DTO并在ViewModel中执行操作,而不是在绑定的对象中执行.
那么当TreeViewItem扩展时,如何在ViewModel中调用命令呢?
我有一个TreeView简化定义为
<TreeView ItemsSource="{Binding TreeItems}">
<TreeView.Resources>
<DataTemplate DataType="{x:Type models:MyModel}">
<Border Margin="{Binding Margin}" >
<Grid>
<TextBlock Text="{Binding Path=Name}" Margin="3,3,3,3" />
</Grid>
</Border>
</DataTemplate>
</TreeView.Resources>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
看起来像这样
正如您所看到的,由于边距是可变的,因此项目之间存在空间.问题是下拉箭头.它不以元素为中心.好吧,它集中在忽略边距的元素上.如何调整箭头?
c# ×3
treeview ×2
wpf ×2
.net ×1
border ×1
dotted-line ×1
mvvm ×1
silverlight ×1
treeviewitem ×1
xaml ×1