UWP Xaml禁用GridViewItem后台控件泄漏到视图中

icnyk63a  于 2023-05-11  发布在  其他
关注(0)|答案(1)|浏览(122)

我有以下XAML

<GridView x:Name="DeviceTargets"
            ContainerContentChanging="GridViewContainerContentChanging"
            Grid.Row="1"
            x:DeferLoadStrategy="Lazy"
            Visibility="Collapsed"
            Margin="0 14 0 10"
            IsItemClickEnabled="True"
            ItemClick="OnDeviceTargetsItemClicked"
            ItemContainerStyle="{StaticResource GridViewItemStyleSV}"
            ItemsSource="{x:Bind ViewModel.DeviceList, Mode=OneWay}"
            Padding="0"
            SelectionMode="None"
            ScrollViewer.HorizontalScrollMode="Disabled"
            ScrollViewer.VerticalScrollMode="Disabled">
    <GridView.ItemTemplate>
        <DataTemplate x:DataType="viewModels:DeviceViewModel">
            <local:DeviceItem ViewModel="{x:Bind}"/>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

DeviceItem控件:

<Grid Style="{StaticResource ItemRootGridStyle}">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    
    <local:BadgedPersonPicture
        x:Name="DeviceBadge"
        Grid.Row="0"
        Contact="{x:Bind ViewModel.DeviceContact, Mode=OneWay}" 
        BadgeImageSource="{x:Bind ViewModel.DeviceBadgeImage, Mode=OneWay}" />

    <local:TwoLinesTextBlock
        x:Name="DeviceName"
        Grid.Row="1"
        Text="{x:Bind ViewModel.DeviceDisplayName, Mode=OneWay}" />
</Grid>

BadgedPersonPicture控件:

<Grid Width="64">
    <PersonPicture
        Width="48"
        Height="48"
        HorizontalAlignment="Center"
        Contact="{x:Bind Contact, Mode=OneWay}"
        ProfilePicture="{x:Bind ProfilePicture, Mode=OneWay}" />
    <Ellipse Width="23" Height="23" StrokeThickness="1" Fill="{ThemeResource PersonBadgeBackgroundBrush}"
        HorizontalAlignment="Right" VerticalAlignment="Bottom" />
    <Ellipse Width="23" Height="23" StrokeThickness="1" Stroke="{ThemeResource PersonBadgeBorderBrush}"
        HorizontalAlignment="Right" VerticalAlignment="Bottom">
        <Ellipse.Fill>
            <ImageBrush ImageSource="{x:Bind BadgeImageSource, Mode=OneWay}" Stretch="None"></ImageBrush>
        </Ellipse.Fill>
    </Ellipse>
</Grid>

当我禁用某些GridViewItem时,它显示如下

正如你在红框中看到的,背景中控件的边框正在泄漏到视图中。任何想法,我如何才能使它看起来像一个没有被禁用至于控制在前面和后面的关注?
注意:图像下的文本是故意模糊的。
更新:附加徽章图像以供参考。

nbewdwxp

nbewdwxp1#

我已经检查过了,并与团队讨论过这个问题。一个可能的原因是,当你禁用该项目时,它会得到一个透明的过滤器,这将改变它的外观。这种行为是设计出来的。
经过讨论,如果您想避免这种行为,可能的解决方案是手动创建看起来像禁用项的样式。将样式应用于项目,而不是禁用项目。

相关问题