WPF字体缩放

我有一个WPF应用程序,用户界面应该缩放,以便窗口变大时应该变大。 在其中一个对话框中,我需要向用户提供一个项目列表,用户应该点击其中的一个。 该列表将包含从1到大约15-20项。 我希望每个单独项目的字体大小与列表中其他项目的字体大小一样大,但同时我希望字体大小在窗口变大时增加。

目前,我的测试代码如下所示。

<Window x:Class="WpfApplication4.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:controls="clr-namespace:WpfApplication4"
    Title="Window1" Height="480" Width="640">


    <ScrollViewer>

        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="30*" MinHeight="30"/>
                <RowDefinition Height="30*" MinHeight="30"/>
                <RowDefinition Height="30*" MinHeight="30"/>
            </Grid.RowDefinitions>

            <Button Grid.Row="0" MaxHeight="100"><Viewbox><TextBlock>T</TextBlock></Viewbox></Button>
            <Button Grid.Row="1" MaxHeight="100"><Viewbox><TextBlock>Test</TextBlock></Viewbox></Button>
            <Button Grid.Row="2" MaxHeight="100"><Viewbox><TextBlock>Test Longer String</TextBlock></Viewbox></Button>

        </Grid>

    </ScrollViewer>

</Window>

如果应用程序已启动并且窗口变宽,则一切看起来都正常。 如果窗口宽度减小,则文本“ Test Longer String的字体大小Test Longer String小,但T和“ Test的字体大小保持不变。 我明白为什么会发生这种情况 - 视框会将内容缩放到最大尺寸。 我想知道的是我应该用什么方法来解决这个问题。

我不想给这些控件指定字体大小,因为有些人会在640x480等低分辨率屏幕上运行此类字体,而其他人则会使用较大的宽屏。

编辑:

我试图将我的代码修改为以下内容:

<ScrollViewer>
    <Viewbox>
        <ItemsControl>
            <Button>Test 2</Button>
            <Button>Test 3</Button>
            <Button>Test 4 afdsfdsa fds afdsaf</Button>
            <Button>Test 5</Button>
            <Button>Test 5</Button>
            <Button>Test 5</Button>
            <Button>Test 5</Button>
            <Button>Test 5</Button>
        </ItemsControl>
    </Viewbox>
</ScrollViewer>

但随着按钮边框的大小也增加,所以在大屏幕上,按钮边框变为厘米宽。


试试这个:渲染你的文本项目,就像你在其他任何时候做的那样:

  • 包含在'ItemsControl'中的TextBlock
  • ListBox
  • 将整个shebang放入一个ViewBox并将其设置为适合您需要的比例。 寻找水平,垂直或组合缩放属性。


    此解决方法可能有所帮助:

        <ScrollViewer>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="30*" MinHeight="30"/>
                <RowDefinition Height="30*" MinHeight="30"/>
                <RowDefinition Height="30*" MinHeight="30"/>
            </Grid.RowDefinitions>
    
            <Button Grid.Row="0" MaxHeight="100">
                <Viewbox>
                    <TextBlock Width="{Binding ElementName=tbLonger,Path=ActualWidth}">T</TextBlock>
                </Viewbox>
            </Button>
            <Button Grid.Row="1" MaxHeight="100">
                <Viewbox>
                    <TextBlock Width="{Binding ElementName=tbLonger,Path=ActualWidth}">Test</TextBlock>
                </Viewbox>
            </Button>
            <Button Grid.Row="2" MaxHeight="100">
                <Viewbox>
                    <TextBlock Name="tbLonger">Test Longer String</TextBlock>
                </Viewbox>
            </Button>
        </Grid>
    </ScrollViewer>
    

    关键是将所有文本块设置为相同的宽度。 在这种情况下,它们都通过绑定遵循最长的文本块。


    我不得不做出解决方案独立应用程序,并在这里回答这个问题:关于开发解决方案独立应用程序的技巧

    与您的应用程序缩放(或缩放),具体取决于分辨率。

    链接地址: http://www.djcxy.com/p/87513.html

    上一篇: WPF font scaling

    下一篇: Vanilla JS: Resize font