我有一个 Page.Resources,假设其中绘制了按钮元素的大小。怎样才能让应用程序窗口在伸缩时,按钮的比例同时变化。例如,按钮图标始终是应用程序窗口宽度的 1/4。
<Style x:Key="Autorize_Button" TargetType="Button">
<Setter Property="Background" Value="{ThemeResource SystemControlBackgroundBaseLowBrush}"/>
<Setter Property="Foreground" Value="{ThemeResource SystemControlForegroundBaseHighBrush}"/>
<Setter Property="BorderBrush" Value="{ThemeResource SystemControlForegroundTransparentBrush}"/>
<Setter Property="BorderThickness" Value="{ThemeResource ButtonBorderThemeThickness}"/>
<Setter Property="Padding" Value="8,4,8,4"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}"/>
<Setter Property="FontWeight" Value="Normal"/>
<Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}"/>
<Setter Property="UseSystemFocusVisuals" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid x:Name="RootGrid" Background="{TemplateBinding Background}">
<ContentPresenter x:Name="ContentPresenter" AutomationProperties.AccessibilityView="Raw" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" ContentTemplate="{TemplateBinding ContentTemplate}" ContentTransitions="{TemplateBinding ContentTransitions}" Content="{TemplateBinding Content}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
<Rectangle Name="Line" Height="1.5" Width="{TemplateBinding ActualWidth}" Fill="White" Opacity="0" VerticalAlignment="Bottom" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
下面是按钮的资源,需要改变叫Line的矩形的宽度(窗口宽度的1/3)
不幸的是,
ActualWidth在 UWP 中,与 WPF 不同,它是一个计算属性,并且不会发送有关其更改的消息。因此,我们必须做出一个相当复杂的决定。首先,我们需要
DependencyProperty,它将给出当前宽度的值。在页面类中(让它被调用MainPage)我们声明:并在构造函数中
现在你可以绑定:
将转换器声明为
并投入可用资源:
为页面命名
Root。从工作代码中提取:
我将不透明度更改为 1 以使线条可见。