相关疑难解决方法(0)

使用Viewbox缩放/拉伸在WPF中维护固定厚度线

我有一个<Grid>包含一些垂直和水平<Line>的.我希望网格可以根据窗口大小进行扩展,并保持其宽高比,因此它包含在a中<Viewbox Stretch="Uniform">.

但是,我也希望线条总是以1像素的宽度渲染,所以我使用:

Line line = new Line();
line.SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Aliased);
// other line settings here...
Run Code Online (Sandbox Code Playgroud)

这使得线条的初始外观非常理想,但是一旦开始调整窗口大小,拉伸/缩放就会开始,并且线条再次成为1和2像素厚度的混合.

有没有办法让线条总是1像素厚,还可以调整窗口/网格的大小?

更新 - 根据Clemens的建议使用路径几何

@Clemens - 感谢您突出显示线条和路径之间的渲染差异.当我尝试使用你的例子重新编写我的代码时,我会感觉到我正在为自己挖掘更多的漏洞,并没有真正掌握整个概念(完全是我的错,不是你的,我只是WPF的新手) .

我将添加一些截图来说明以下描述:

我正在制作一个游戏板(对于Go游戏,以防万一有助于理解布局).我有一个9x9网格,我打算通过简单地将椭圆添加到特定网格单元来放置游戏块.

然而,为了在板上绘制下面的线,我需要在板上绘制与单元格中间相交的线(在Go中,块放置在交叉点上,而不是单元格的中间).

很可能我采取了完全错误的方法,请随时告诉我重新开始不同的路线,而不是在当前结构中进行黑客攻击.

这就是我到目前为止的方式(由于计算坐标的方式,我以编程方式添加路径.不确定是否可以在XAML中完成):

XAML:

<Grid MinHeight="400" MinWidth="400" ShowGridLines="False" x:Name="boardGrid">
    <Grid.Resources>
        <ScaleTransform x:Key="transform"
            ScaleX="{Binding ActualWidth, ElementName=boardGrid}"
            ScaleY="{Binding ActualHeight, ElementName=boardGrid}" />
    </Grid.Resources>
    <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <!-- more rows, 9 in total -->
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition></ColumnDefinition>
        <!-- more columns, 9 in total -->
    </Grid.ColumnDefinitions>

    <!-- example game pieces -->
    <Ellipse …
Run Code Online (Sandbox Code Playgroud)

c# wpf antialiasing viewbox

7
推荐指数
1
解决办法
7077
查看次数

如何在Winforms中使UI响应

而不是大多数人第一次学习Winforms然后搬到了WPF,我是相反的!由于某些关于图形性能的原因,我必须使用Winforms.但是我坚持第一步.如何使UI响应像WPF一样.Grids在Winforms中相当于什么.任何帮助都非常感谢.

.net c# wpf winforms

4
推荐指数
2
解决办法
8658
查看次数

标签 统计

c# ×2

wpf ×2

.net ×1

antialiasing ×1

viewbox ×1

winforms ×1