Ric*_*ner 5 data-binding wpf toolbar mvvm
我有一个WPF窗口ToolBar.我的VM中有一组对象,我正在绑定它.它们显示为按钮,但它们总是被推到扩展的下拉部分ToolBar.如何使这些按钮出现在标准部分ToolBar?
我有以下XAML:
<ToolBarTray Grid.Row="1">
<ToolBar ItemsSource="{Binding Path=MyList}" >
<ToolBar.ItemTemplate>
<DataTemplate >
<Button ToolTip="{Binding ButtonName}"
Command="{Binding Path=ButtonCommand}" >
<Button.Content>
<Image Width="32" Height="32" Source="{Binding ImageSource}"/>
</Button.Content>
</Button>
</DataTemplate>
</ToolBar.ItemTemplate>
</ToolBar>
</ToolBarTray>
Run Code Online (Sandbox Code Playgroud)
我有以下C#:
public List<MyClass> MyList
{
get
{
return new List<MyClass>
{
new MyClass{ButtonName="Button1",ImageSource=@"C:\Projects\WpfApplication2\WpfApplication2\Employee.png"},
new MyClass{ButtonName="Button2",ImageSource=@"C:\Projects\WpfApplication2\WpfApplication2\Employee.png"},
new MyClass{ButtonName="Button3",ImageSource=@"C:\Projects\WpfApplication2\WpfApplication2\Employee.png"},
new MyClass{ButtonName="Button4",ImageSource=@"C:\Projects\WpfApplication2\WpfApplication2\Employee.png"},
};
}
}
Run Code Online (Sandbox Code Playgroud)
这是视觉效果:

工具栏中有一个错误,如果重新调整窗口大小,问题就会消失。
解决方案是使用另一个控件,例如:
public class WorkaroundToolBar : ToolBar
{
private delegate void IvalidateMeasureJob();
public override void OnApplyTemplate()
{
Dispatcher.BeginInvoke(new IvalidateMeasureJob(InvalidateMeasure),
DispatcherPriority.Background, null);
base.OnApplyTemplate();
}
}
Run Code Online (Sandbox Code Playgroud)
查看此线程以获取更多信息
| 归档时间: |
|
| 查看次数: |
6664 次 |
| 最近记录: |