2

我已经创建并实现了 WPf UserContol,例如 Window8 PasswordBox。当我更改字体时,文本框和内部按钮都已更改。不幸的是,当文本框字体大小完美时,按钮字体大小不合适。(见图片 - 第二个按钮有完美的按钮字体大小,但文本框没有。第三个按钮没有完美,但文本框有完美的字体大小)

如何在实现时设置两个控件的字体大小?像属性 Button_fontSize 和 textbox_fontSize。

我的用户控件 XAML 代码:

        <Grid.Resources>
            <Style x:Key="ButtonWithoutHover" TargetType="Button">
                <Setter Property="OverridesDefaultStyle" Value="True"/>
                <Setter Property="Margin" Value="0"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Border Name="border" 
                            BorderThickness="3"                                                        
                            BorderBrush="White"                            
                            Background="{TemplateBinding Background}">
                                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter TargetName="border" Property="BorderBrush" Value="Black" />
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Grid.Resources>
        <Border BorderBrush="White" BorderThickness="2" >
                <DockPanel Canvas.Right="2" Canvas.Top="2">
                <Button Style="{StaticResource ButtonWithoutHover}" BorderThickness="3" BorderBrush="White" DockPanel.Dock="Right" Click="onButtonClick" >
                        <Button.Content>
                            <Label Content="->" Foreground="White" />
                        </Button.Content>
                    </Button>
                    <TextBox BorderThickness="0" Name="txtNumber" DockPanel.Dock="Left" >
                    </TextBox>
                </DockPanel>
            </Border>

实现 XMAL 代码:

 <NumText:UserControl1 Click="UserControl1_Click" FontSize="9" Background="Red" Foreground="Yellow" Margin="160,46,206,229" />
        <NumText:UserControl1 Click="UserControl1_Click" FontSize="20" Background="Red" Foreground="Yellow" Margin="121,104,173,145" />
        <NumText:UserControl1 Background="Red" FontSize="36" Foreground="Yellow" Margin="121,180,173,69" />

e

4

2 回答 2

0

您不必要地使情况复杂化了……您不需要不同大小的字体或DockPanels或Borders。而不是所有这些,只是让内容大小UserControl,而不是相反。试试这个简化的例子(在 中使用Usercontrol

<Grid Margin="5">
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <TextBox Grid.Column="0" Text="jagadees" BorderThickness="0" 
VerticalAlignment="Center" />
    <Button Grid.Column="1" Style="{StaticResource ButtonWithoutHover}" 
Background="Red" Foreground="White" Content="->" VerticalAlignment="Center" />
</Grid>

更新>>>

我的全部观点是,如果您重组了 XAML,那么您会发现您不需要使用不同的字体大小。但是,如果您决心这样做,那么只需实现一个简单的Converter类来更改其中一个元素的大小:

public class DoubleToLargerDoubleConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null || value.GetType() != typeof(double)) return false;
        double amountToEnlargeBy = 0;
        if (parameter == null || double.TryParse(parameter.ToString(), out amountToEnlargeBy)) return false;
        double doubleValue = (double)value;
        return doubleValue + amountToEnlargeBy;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return DependencyProperty.UnsetValue;
    }
}

由于您从未真正说过您想要更大的文本,我只是猜测Button文本应该更大。在这种情况下,您可以像这样使用它:

<Label Content="->" Foreground="White" FontSize="{Binding FontSize, RelativeSource={
    RelativeSource AncestorType={x:Type Button}}, Converter={StaticResource 
    DoubleToLargerDoubleConverter}, ConverterParameter=5.0}" />

我将假设您知道如何使用 a Converter,所以如果您不知道,请告诉我。只需在属性中设置您希望字体大小放大的量 Binding.ConverterParameter

于 2013-11-01T09:53:29.180 回答
0

我在工作中所做的一件事是创建一个Double资源来设置FontSize属性。我相信它会解决你的问题:

首先,在 XAML 文件中声明命名空间:

xmlns:sys="clr-namespace:System;assembly=mscorlib"

然后创建两个不同的Double“变量” x:Key

<sys:Double x:Key="SmallFont">10</sys:Double>
<sys:Double x:Key="LargeFont">35</sys:Double>

最后设置控件的FontSize属性:

FontSize="{DynamicResource SmallFont}"

或者

FontSize="{DynamicResource LargeFont}"

如果我理解正确,这就是我所做的!
希望能帮助到你。

于 2013-11-01T08:17:03.737 回答