WPF:Textblock字体大小在其大小更改时应该是偶数

时间:2012-05-08 11:20:07

标签: wpf textblock font-size

我在我的应用程序中创建了一个自定义按钮,如下所示

<Button x:Class="MyApp.ButtonMainMenuSubCat"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="100" d:DesignWidth="536">
    <Button.Template>
        <ControlTemplate TargetType="{x:Type Button}">
            <Grid>
                <Grid Name="gridParent">
                    <Image Name="imgTransparent" Source="/MyApp;component/Resources/LeftCategoryTransparent.png" Stretch="Fill" Margin="0,0,0,0"  />
                    <Image Name="Part_Pressed" Source="/MyApp;component/Resources/PressedMainScreenSubMenu.png" Stretch="Fill" Margin="0,0,0,4"  Visibility="Hidden"/>
                    <Image Name="Focused" Source="/MyApp;component/Resources/MainSubMenuFocus.png" Margin="-3,0,-3,3"   Stretch="Fill" Visibility="Hidden" />
                    <Image Name="Seperator" Source="/MyApp;component/Resources/MainSubMenuSeperator.png" Margin="5,0,5,-1"   Stretch="Uniform" VerticalAlignment="Bottom"/>

                    <TextBlock Name="lblTitle" Text="{TemplateBinding Content}" HorizontalAlignment="Left"  Foreground="Gray" FontWeight="{TemplateBinding FontWeight}"   FontSize="24"  Margin="10" VerticalAlignment="Center" TextWrapping="WrapWithOverflow" TextAlignment="Left"/>
                </Grid>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsPressed" Value="True">
                    <!--<Setter TargetName="Pressed" Property="Visibility" Value="Visible"/>-->

                </Trigger>
                <Trigger Property="IsFocused" Value="True">
                    <Setter TargetName="Focused" Property="Visibility" Value="Visible"/>
                    <Setter TargetName="lblTitle" Property="Foreground" Value="#f8cb1c" />
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Button.Template>
</Button>

在我的应用程序中,我调用Web服务,根据项目的数量,我为每个项目创建按钮,最后在StackPanel中添加这些按钮。它运作良好。 Stakpanel布局位于屏幕截图的左侧。现在的问题是,当我在具有不同屏幕分辨率(如1920 * 1200)的不同机器上运行此应用程序时,字体大小似乎太小。所以我想在容器大小改变时调整字体大小。一个选项是使用 ViewBox 但是在ViewBox的情况下,所有按钮看起来都有不同的字体大小,并且TextWrapping是不可能的。

所以我的实际要求是使用TextWrapping增加/减少文本块的字体大小,并且所有按钮的字体大小必须均匀。

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以根据屏幕分辨率使用LayoutTransform,您可以根据分辨率放大堆叠面板或放大整个窗口。

对于stackpanel:

<StackPanel>
    <StackPanel.LayoutTransform>
        <ScaleTransform  x:Name="ScaleTransform" />
    </StackPanel.LayoutTransform>
    <Button>A</Button>
    <Button>B</Button>
    <Button>C</Button>
    <Button>D</Button>
</StackPanel>

然后将ScaleX和ScaleY绑定到基于分辨率的公式。一个例子:

double scale = System.Windows.SystemParameters.PrimaryScreenHeight / 720;
//using 720p as the base screen height.

this.ScaleTransform.ScaleX = scale;
this.ScaleTransform.ScaleY = scale;

如果使用MVVM,您可能希望在具有数据绑定的ViewModel中执行此操作。