2

Window8 PasswordBox のような WPf UserContol を作成して実装しました。フォントを変更すると、テキストボックスと内部ボタンの両方が変更されました。残念ながら、テキストボックスのフォントサイズが完璧な場合、ボタンのフォントサイズは適切ではありません。(画像を参照してください - 2 番目のボタンのボタンのフォント サイズは完璧ですが、テキスト ボックスはそうではありません。3 番目のボタンは完璧ではありませんが、テキスト ボックスのフォント サイズは完璧です)

実装時に 2 つのコントロールのフォント サイズを設定するにはどうすればよいですか? プロパティ Button_fontSize および textbox_fontSize と同様です。

私の Usercontol 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

不必要に状況を複雑にしています... 異なるサイズのフォント、または 、または は必要ありませDockPanelBorder。このすべての代わりに、コンテンツのサイズを に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、要素の 1 つのサイズを変更する単純なクラスを実装するだけです。

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}" />

の使い方はご存知だと思いますConverterので、ご存知ない方は教えてください。Binding.ConverterParameterプロパティでフォントサイズを拡大する量を設定するだけです 。

于 2013-11-01T09:53:29.180 に答える
0

私が自分の仕事で行ったことの 1 つは、プロパティDoubleを設定するためのリソースを作成することです。FontSize私はそれがあなたの問題を解決すると信じています:

まず、XAML ファイルで名前空間を宣言します。

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

次に、次のように 2 つの異なる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 に答える