如何将ContentPresenter放入工具栏中

时间:2012-07-20 18:29:33

标签: wpf xaml toolbar contentpresenter

我正在努力将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

2 个答案:

答案 0 :(得分:0)

我认为您可能会将ContentPresenterContentControl混淆。

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。