2

我正在努力将 ContentPresenter 放入工具栏中。我有一个带有视图模型 DashboardViewModel 的用户控件 DashboardView。我的 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 放在工具栏之外的 Grid 中,它看起来很好。所以它与工具栏有关,但我不知道是什么。

更新:我还尝试(在很多事情中)将 ContentPresenter 放在 MenuItem 中,如下所示:

            <ToolBar Band="0" BandIndex="1">
                <MenuItem>
                    <MenuItem.Header>
                        <ContentPresenter Content="{Binding Path=DashboardViewModel}"/>
                    </MenuItem.Header>
                </MenuItem>
            </ToolBar>

还是没有出现。

更多信息:

仪表板视图:

<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; 放;}

如前所述,这在工具栏托盘上方的视图中连续工作得很好。

蒂亚!

珍妮

4

2 回答 2

0

我认为您可能会将 aContentPresenter与 a混淆ContentControl

AContentPresenter用于指示自定义内容应出现在 ContentControl 的 ControlTemplate 中的可视层次结构中的哪个位置。

AContentControl是您可以放入 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>
于 2012-07-20T22:33:49.630 回答
0

回答我自己的问题......我的代码没有任何问题。ContentPresenter 的内容中的项目超出了工具栏的宽度。由于内容太宽,工具栏没有显示任何内容。

一整天都在追逐一个只需要我让我的狗更小、更聪明地调整大小的错误。

于 2012-07-21T04:05:17.220 回答