Uwp 带刀片的多视图

Uwp 带刀片的多视图,uwp,uwp-xaml,windows-community-toolkit,Uwp,Uwp Xaml,Windows Community Toolkit,我正在尝试创建一个UWP应用程序,允许用户打开新窗口。我创建新窗口的基础是 当新视图包含刀片(来自Microsoft.Toolkit.Uwp.UI.Controls)时,我遇到了一个奇怪的错误。错误是: System.Runtime.InteropServices.COMException:调用COM组件时返回错误HRESULT E_FAIL。 在Windows.UI.Xaml.FrameworkElement.MeasureOverride(可用大小大小大小) 要复制此错误,请在Seconda

我正在尝试创建一个UWP应用程序,允许用户打开新窗口。我创建新窗口的基础是

当新视图包含刀片(来自Microsoft.Toolkit.Uwp.UI.Controls)时,我遇到了一个奇怪的错误。错误是:

System.Runtime.InteropServices.COMException:调用COM组件时返回错误HRESULT E_FAIL。 在Windows.UI.Xaml.FrameworkElement.MeasureOverride(可用大小大小大小)

要复制此错误,请在SecondaryViewPage.xaml第49行的链接示例中添加以下代码:

<controls:BladeView x:Name="BladeView" Grid.Column="0"
            Padding="0"
            BladeMode="{Binding BladeMode.Value}">
    <controls:BladeItem
                TitleBarVisibility="Collapsed"
                IsOpen="True" Width="300" />
</controls:BladeView>

然后执行以下步骤:

  • 创建新视图
  • 显示视图
  • 关闭视图
  • 创建新视图

  • 有谁能确定是什么导致了错误,或者告诉我独立视图中的刀片是否无法工作?

    很有趣。由于某种原因,
    BladeItem
    的默认样式实际上导致了该问题

    由于您已经将标题栏可见性设置为已折叠,因此修复此问题非常简单。您只需将以下样式应用于您的
    BladeItem
    。这与默认网格之间的唯一区别是内部
    网格
    已被注释掉。是的,这就是问题所在

    <Style x:Key="MyBladeStyle" TargetType="controls:BladeItem">
        <Setter Property="VerticalContentAlignment" Value="Stretch" />
        <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
        <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" />
        <Setter Property="Background" Value="Transparent" />
        <Setter Property="Foreground" Value="{ThemeResource SystemControlForegroundBaseHighBrush}" />
        <Setter Property="TabNavigation" Value="Local" />
        <Setter Property="IsHoldingEnabled" Value="True" />
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        <Setter Property="HorizontalAlignment" Value="Stretch" />
        <Setter Property="VerticalAlignment" Value="Stretch" />
        <Setter Property="Margin" Value="0" />
        <Setter Property="MinWidth" Value="{ThemeResource GridViewItemMinWidth}" />
        <Setter Property="MinHeight" Value="{ThemeResource GridViewItemMinHeight}" />
        <Setter Property="BorderBrush" Value="Black" />
        <Setter Property="BorderThickness" Value="1" />
        <Setter Property="IsTabStop" Value="False" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="controls:BladeItem">
                    <Grid BorderBrush="{TemplateBinding BorderBrush}"
                          BorderThickness="{TemplateBinding BorderThickness}">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>
    
                        <!--<Grid Background="{TemplateBinding TitleBarBackground}"
                              Visibility="{TemplateBinding TitleBarVisibility}">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
    
                            <TextBlock Margin="4,0,0,0"
                                       HorizontalAlignment="Left"
                                       VerticalAlignment="Center"
                                       Foreground="{TemplateBinding TitleBarForeground}"
                                       Text="{TemplateBinding Title}" />
                            <Button Name="CloseButton"
                                    Grid.Column="1"
                                    TabIndex="0"
                                    HorizontalAlignment="Right"
                                    AutomationProperties.Name="Cancel"
                                    Background="{TemplateBinding CloseButtonBackground}"
                                    Content="&#xE711;"
                                    FontFamily="Segoe MDL2 Assets"
                                    Foreground="{TemplateBinding CloseButtonForeground}" />
                        </Grid>-->
    
                        <ContentPresenter Grid.Row="1"
                                          VerticalAlignment="Stretch"
                                          Background="{TemplateBinding Background}"
                                          Visibility="{TemplateBinding IsOpen}" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    

    注意,现在有了上面的两行代码,您不再需要注释掉内部的
    网格

    什么是
    BladeView
    ?你能分享一个我们可以重现你的问题的例子吗?我已经给出了一个例子,它是来自GitHub的Microsoft多视图示例,我的问题中的代码插入到SecondaryViewPage.xaml的第49行。你是否也将此作为一个问题发布在UWP toolkit GitHub上。。。也许微软的某个人可以拿起它看看它是否是UWP错误?@depchie我会的,但我想先等OP批准这确实是问题的原因。:)不过我很有信心。打得好!让OP重新测试:)@RyanRatenKuhar太棒了!我还要报告这个问题。非常好的发现。:)@我试着在他们的样本GitHub上报告这个问题,他们拒绝了我,把我送到他们的付费支持中心。也许我只是在错误的地方?
    <!-- Add the following to the default style -->
    <Setter Property="TitleBarForeground" Value="Black" />
    <Setter Property="CloseButtonForeground" Value="Black" />