我正在努力将ContentPresenter放入工具栏中。我有一个UserControl,DashboardView,带有一个viewmodel,DashboardViewModel。我的ContentPresenter设置如下:
在UserControl.Resources中的,我有:
<DataTemplate DataType="{x:Type DashboardVM:DashboardViewModel}">
<Dashboard:DashboardView />
</DataTemplate>
并在工具栏中:
<ToolBarTray Margin="0" DockPanel.Dock="Top">
<ToolBar Band="0" BanIndex="0">
<--! other stuff -->
<ToolBar Band="0" BandIndex="1" MinWidth="500" ToolBarTray.IsLocked="True">
<ContentPresenter Content="{Binding Path=DashboardViewModel}" />
</ToolBar>
</ToolBarTray>
执行时不会出现ContentPresenter。另一个ToolBar可以。
我已将ContentPresenter放在网格工具栏之外,看起来很好。所以它与ToolBar有关,但我无法弄清楚是什么。
更新:我还尝试(在许多方面)将ContentPresenter放在MenuItem中,如下所示:
<ToolBar Band="0" BandIndex="1">
<MenuItem>
<MenuItem.Header>
<ContentPresenter Content="{Binding Path=DashboardViewModel}"/>
</MenuItem.Header>
</MenuItem>
</ToolBar>
仍然没有出现。
更多信息:
DashboardView:
<UserControl x:Class="Wsi.Common.View.Dashboard.DashboardView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Dashboard="clr-namespace:Wsi.Common.ViewModel.Dashboard"
xmlns:view="clr-namespace:Wsi.Common.View.Dashboard"
MinWidth="500"
MinHeight="30"
MaxHeight="70">
<UserControl.Resources>
<DataTemplate DataType="{x:Type Dashboard:DashboardItemViewModel}">
<view:DashboardItemView />
</DataTemplate>
</UserControl.Resources>
<StackPanel MaxHeight="70" Orientation="Horizontal">
<ContentPresenter x:Name="fileSystemDashboardItem" Content="{Binding Path=FileSystemDashboardItemViewModel}" />
<ContentPresenter x:Name="spreadHealthDashboardItem" Content="{Binding Path=SpreadHealthDashboardItemViewModel}" />
<ContentPresenter x:Name="spreadStatsDashboardItem" Content="{Binding Path=SpreadStatsDashboardItemViewModel}" />
<ContentPresenter x:Name="acquisitionStatsDashboardItem" Content="{Binding Path=AcquisitionStatsDashboardItemViewModel}" />
<ContentPresenter x:Name="backhaulHealthDashboardItem" Content="{Binding Path=BackhaulHealthDashboardItemViewModel}" />
<ContentPresenter x:Name="serverHealthDashboardItem" Content="{Binding Path=ServerHealthDashboardItemViewModel}" />
</StackPanel>
DashboardViewModel只为上面的子视图模型保存属性,只需{get; set;}
如前所述,这在ToolBarTray上方的View中连续完美地运行。
TIA!
Janene
答案 0 :(得分:0)
我认为您可能会将ContentPresenter
与ContentControl
混淆。
ContentPresenter
用于指示可视化层次结构中自定义内容应出现在ContentControl的ControlTemplate中的位置。
ContentControl
是您可以放入UI的实际控件。
如果你这样做会怎么样?
<DataTemplate DataType="{x:Type DashboardVM:DashboardViewModel}">
<Dashboard:DashboardView />
</DataTemplate>
<ToolBarTray Margin="0" DockPanel.Dock="Top">
<ToolBar Band="0" BanIndex="0">
<--! other stuff -->
<ToolBar Band="0" BandIndex="1" MinWidth="500" ToolBarTray.IsLocked="True">
<ContentControl Content="{Binding Path=DashboardViewModel}" />
</ToolBar>
</ToolBarTray>
答案 1 :(得分:0)
回答我自己的问题......我的代码没有任何问题。 ContentPresenter的内容中的项目超出了工具栏的宽度。由于内容太宽,工具栏没有显示任何内容。
整整一天都在追逐一个只需要让我变得更小巧,更聪明才能调整大小的bug。