【问题标题】:WPF: Eliminate transparency between grid cellsWPF:消除网格单元格之间的透明度
【发布时间】:2008-11-06 01:06:55
【问题描述】:

我在 WPF 中有一个网格。网格具有透明背景(必需),并且每个单元格可能具有不同颜色的纯色背景,或者可能没有背景。当我在这些单元格中放置任意内容时,当两个相邻的单元格都具有彩色背景(相同或不同颜色,没关系)时,通常(并且不可预测地)有一条细透明线将它们分开,让您可以看穿网格在那一行。

有谁知道如何解决这个问题?

编辑:想在我的问题中提到它,但我尝试在任何地方启用 SnapsToDevicePixels,但无济于事。

【问题讨论】:

    标签: c# .net wpf


    【解决方案1】:

    没有看到任何代码,我的猜测是您需要在网格中的元素上使用SnapsToDevicePixels

    【讨论】:

    • 我的意思是在我的问题中提到它,但我已经尝试在任何地方和任何地方启用 SnapsToDevicePixels,但无济于事。
    • 呃,我试图编写一个示例,但它没有捕捉到问题,所以我必须尝试从“真实”应用程序中获取更多信息来编写一个示例。
    • 你能把它固定到特定的单元格内容吗?强制重绘(最小化等)是否可以解决问题?有没有可能你在那个时候不小心有一个空的列/行?
    • 当其中一个单元格的内容发生变化时,我发现了问题。这是在一个子类窗口中,您可以设置一个特定单元格的内容。不同大小的内容(拉伸单元格和窗口)会导致出现不同的线条。
    • 在变大时出现,还是仅在变小时出现?
    【解决方案2】:

    这会产生相同的问题,但可能不是相同的确切原因。不过,如果我们能解决这个问题,它可能会为您的问题提供提示。

    <Grid Background="Transparent">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
    
            <Grid.RowDefinitions>
                <RowDefinition Height="3*" />
                <RowDefinition Height="3*" />
                <RowDefinition Height="3*" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
    
            <Label Grid.Column="0" Grid.Row="0" Background="PaleGoldenrod" />
            <Label Grid.Column="1" Grid.Row="0" Background="White" />
            <Label Grid.Column="2" Grid.Row="0" Background="PaleGoldenrod" />
    
    
            <Label Grid.Column="0" Grid.Row="1" Background="White" />
            <!-- This is in the significant cell -->
            <Label Grid.Column="1" Grid.Row="1" x:Name="SizeChangeLabel" Background="PaleGoldenrod">
                Watch this cell
            </Label>
            <Label Grid.Column="2" Grid.Row="1" Background="White" />
    
            <Label Grid.Column="0" Grid.Row="2" Background="PaleGoldenrod" />
            <Label Grid.Column="1" Grid.Row="2" Background="White" />
            <Label Grid.Column="2" Grid.Row="2" Background="PaleGoldenrod" />
    
    
            <Button x:Name="ReduceContentSize" Grid.Row="3" Grid.Column="0" Click="ReduceContentSize_Click">Reduce</Button>
            <Button x:Name="IncreaseContentSize" Grid.Row="3" Grid.Column="1"   Click="IncreaseContentSize_Click">Increase</Button>
            <TextBlock Grid.Row="3" Grid.Column="2" Foreground="White">
                The window is black
            </TextBlock> 
    </Grid>
    

    点击事件调整中心单元格中标签的最小宽度。当你碰到它时,你会得到我认为与你的问题相同的行。

    private const double _sizeChangeAmount = 150;
    
        private void IncreaseContentSize_Click(object sender, RoutedEventArgs e)
        {
            SizeChangeLabel.MinWidth = SizeChangeLabel.ActualWidth + _sizeChangeAmount;
            SizeChangeLabel.MinHeight = SizeChangeLabel.ActualHeight + _sizeChangeAmount;   
        }
    
        private void ReduceContentSize_Click(object sender, RoutedEventArgs e)
        {
            if (SizeChangeLabel.MinWidth > 150)
                SizeChangeLabel.MinWidth = SizeChangeLabel.ActualWidth - _sizeChangeAmount;
    
            if (SizeChangeLabel.MinHeight > 150)
                SizeChangeLabel.MinHeight = SizeChangeLabel.ActualHeight - _sizeChangeAmount;
        }
    

    这是一个合理的近似值,有助于得出解决方案吗?

    【讨论】:

    • 这与我尝试的近似值非常相似,但是通过在所有元素上添加 SnapsToDevicePixels=true 解决了这个问题(不确定它到底在哪里是必要的,所以我把它放在所有元素上,即使我认为它会流下来。)我发誓即使打开 SnapsToDevicePixels 我也有问题。
    • 有趣——我把 SnapsToDevicePixels 放在窗口、网格、所有标签、按钮和 TextBlock 上,我仍然得到这些行。您在窗口上使用了哪些与尺寸相关的属性? (SizeToContent 等)。
    • 您可以通过将内容的边距设置为 -1 来破解它。但我讨厌那样。 :(
    • 窗口是 SizeToContent="WidthAndHeight"。我将尝试 Margins 技术,只是为了它的地狱。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多