C# .ScaleControl的WPF版本?
什么是WPF版本的C# .ScaleControl的WPF版本?,c#,wpf,winforms,scaling,user-preferences,C#,Wpf,Winforms,Scaling,User Preferences,什么是WPF版本的 我试图通过将字体设置为以下值来尊重用户的字体偏好: 与WinForms不同,表单的内容不随字体更改而缩放: 之前 之后(坏) 实际上,表单上的所有控件(包括按钮的大小、listview列的宽度等)都应缩放以匹配新布局: 之后(好) 由于WPF不()响应字体大小的更改,因此我打算通过自己尝试缩放WPF表单来解决这个问题,使用假设的WPF版本: 想要缩放控件(和所有子控件)的另一个例子是,当我需要缩放控件(和所有子控件)以适应给定的大小时。在这种情况下,我不想缩放整个表
我试图通过将字体设置为以下值来尊重用户的字体偏好: 与WinForms不同,表单的内容不随字体更改而缩放: 之前
之后(坏)
实际上,表单上的所有控件(包括按钮的大小、listview列的宽度等)都应缩放以匹配新布局: 之后(好)
由于WPF不()响应字体大小的更改,因此我打算通过自己尝试缩放WPF表单来解决这个问题,使用假设的WPF版本:
想要缩放控件(和所有子控件)的另一个例子是,当我需要缩放控件(和所有子控件)以适应给定的大小时。在这种情况下,我不想缩放整个表单,我只想缩放特定控件。这个解决方案怎么样
<Window
x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
FontSize="40"
Loaded="Window_Loaded"
SizeToContent="WidthAndHeight"
Title="MainWindow">
<Grid x:Name="LayoutRoot" Width="525" Height="350">
<Button Width="300" Height="60" Content="Hello world"/>
<Grid.LayoutTransform>
<ScaleTransform x:Name="scaleTransform"/>
</Grid.LayoutTransform>
</Grid>
</Window>
我不确定它是否完全符合您的要求,但WPF确实包含一个自动缩放控件: 这有点笨手笨脚,所以。最终,您可能会发现您需要更精确的控制,因此您必须在设计模板时小心,等等。但是,Viewbox将为您提供一些基本的缩放功能
另请参见:我不明白问题是什么?@Navid Rahmani:缩放控件(以及所有子控件)时使用的WPF方法是什么?我不希望元素像其内容那样大。e、 g.listview列的宽度可以是120px。如果listview的字体变大11%,那么该列的宽度应该是133px(120px*111%=133.2px),这是什么意思?有哪些注意事项?这个描述(定义了一个内容装饰器,它可以拉伸和缩放一个孩子来填充可用的空间。)听起来很符合我的风格。@Ian-看看我在答案中添加的链接。如果使用得太多,会有一些性能上的问题(你必须用谷歌搜索它——我手头没有来源)。这就是说,即使您只使用了一点点,您可能会发现最终您希望更好地控制较小的区域(有时缩放字体在您的UI上下文中看起来不太正确,或者如果您使用不同的视口,您会在同一UI上为同一控件获得不同大小的字体,等等)。你能做的最好的事情就是尝试一下,看看它是否符合你的要求。(例如:如果它有效,很好!如果不行,你还有更多的工作要做。):@Wonko the Sane:别看我!在今晚晚些时候有机会尝试之前,我没有投赞成票,也没有投反对票。虽然从技术上讲,告诉我查看框的存在是“有用的”。哦,我不是想责怪你…:)我可以接受否决票(否则我就不会成为会员)。然而,我不理解在没有解释的情况下否决一个问题——没有机会改进答案。
private void ApplyUserFontPreferences()
{
Double scaleFactor = (SystemFonts.IconFontSize / this.FontSize); //i.e. new / old
this.ScaleControl(scaleFactor); //doesn't exist
this.FontFamily = SystemFonts.IconFontFamily;
// this.FontSize = SystemFonts.IconFontSize;
this.FontStyle = SystemFonts.IconFontStyle;
this.FontWeight = SystemFonts.IconFontWeight;
}
<Window
x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
FontSize="40"
Loaded="Window_Loaded"
SizeToContent="WidthAndHeight"
Title="MainWindow">
<Grid x:Name="LayoutRoot" Width="525" Height="350">
<Button Width="300" Height="60" Content="Hello world"/>
<Grid.LayoutTransform>
<ScaleTransform x:Name="scaleTransform"/>
</Grid.LayoutTransform>
</Grid>
</Window>
private void Window_Loaded(object sender, RoutedEventArgs e)
{
ApplyUserFontPreferences();
}
private void ApplyUserFontPreferences(){
Double scaleFactor = (SystemFonts.IconFontSize / this.FontSize);
this.scaleTransform.ScaleX = scaleFactor;
this.scaleTransform.ScaleY = scaleFactor;
this.FontFamily = SystemFonts.IconFontFamily;
this.FontStyle = SystemFonts.IconFontStyle;
this.FontWeight = SystemFonts.IconFontWeight;
}