尝试使用C#和WPF在文本框中调整TextBox +字体大小,只能执行其中一个

sdo*_*ble 1 c# wpf viewbox

当调整窗口大小时,我正在尝试调整文本框和文本框内的文本的大小.我似乎能够做一个或另一个,但不能同时做两个.

调整文本框的大小有效,但我无法调整文本内部的大小: 原始尺寸 调整

以上示例的代码:

    <Grid Grid.Row="1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="133*"/>
            <ColumnDefinition Width="20*"/>
            <ColumnDefinition Width="20*"/>
        </Grid.ColumnDefinitions>
        <Button Content="Button" Grid.Column="2"/>
        <Button Content="Button" Grid.Column="1"/>
        <TextBox TextWrapping="Wrap" VerticalContentAlignment="Center"/>
    </Grid>
Run Code Online (Sandbox Code Playgroud)

或者调整字体的大小,但是我无法使文本框填充我正在使用的视图框: 原版的 调整

以上示例的代码:

    <Grid Grid.Row="1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="133*"/>
            <ColumnDefinition Width="20*"/>
            <ColumnDefinition Width="20*"/>
        </Grid.ColumnDefinitions>
        <Button Content="Button" Grid.Column="2"/>
        <Button Content="Button" Grid.Column="1"/>
        <Viewbox Stretch="Uniform">
            <TextBox TextWrapping="Wrap" VerticalContentAlignment="Center"/>
        </Viewbox>
    </Grid>
Run Code Online (Sandbox Code Playgroud)

使用Stretch ="Fill"(在正确的轨道上,但我宁愿保持统一,UniformToFill做一些奇怪的事情,我甚至看不到发生了什么) 填

kma*_*zek 5

你可以使用转换器.

public class FontSizeConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        double actualHeight = System.Convert.ToDouble(value);
        int fontSize = (int)(actualHeight * .5);
        return fontSize;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

XAML:

....
<Window.Resources>
    <local:FontSizeConverter x:Key="fontSizeCon" />
</Window.Resources>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="9*" />
        <RowDefinition Height="1*" />
    </Grid.RowDefinitions>     
    <Grid Grid.Row="1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="133*"/>
            <ColumnDefinition Width="20*"/>
            <ColumnDefinition Width="20*"/>
        </Grid.ColumnDefinitions>
        <Button Content="Button" Grid.Column="2"/>
        <Button Content="Button" Grid.Column="1"/>
        <TextBox TextWrapping="Wrap" VerticalContentAlignment="Center"
                 FontSize="{Binding Path=ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Grid}, Converter={StaticResource fontSizeCon}}"/>
    </Grid>      
</Grid>
...
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

在此输入图像描述

  • 感谢那.我还在学习WPF,不得不看一些事情,甚至看看你在这里做了些什么.我不仅获得了一个有效的解决方案,而且还学习了一些研究该解决方案的东西. (2认同)