我在我的应用程序中创建了一个自定义按钮,如下所示
<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增加/减少文本块的字体大小,并且所有按钮的字体大小必须均匀。
答案 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中执行此操作。