2

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

<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 增加/减少文本块的字体大小,并且所有按钮的字体大小必须均匀。

在此处输入图像描述

4

1 回答 1

2

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

对于堆栈面板:

<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 中执行此操作。

于 2012-05-11T06:33:20.363 回答