Wpf 如何根据文本长度更改文本框的宽度?

Wpf 如何根据文本长度更改文本框的宽度?,wpf,mvvm,triggers,textbox,Wpf,Mvvm,Triggers,Textbox,我想从那些打字游戏中重新制作一种游戏,其中的单词来自某个地方,你必须正确地写下这个单词 这里有一个: 我的第一个问题是我什么也找不到,我如何动态地改变文本框的宽度 因此,如果整个单词无法放入文本框,我想增加文本框的宽度。我怎么做呢 以下是我的看法: <UserControl x:Class="Prog_korny.View.GameView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentat

我想从那些打字游戏中重新制作一种游戏,其中的单词来自某个地方,你必须正确地写下这个单词

这里有一个:

我的第一个问题是我什么也找不到,我如何动态地改变文本框的宽度

因此,如果整个单词无法放入文本框,我想增加文本框的宽度。我怎么做呢

以下是我的看法:

<UserControl x:Class="Prog_korny.View.GameView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Prog_korny"
             xmlns:vm="clr-namespace:Prog_korny.ViewModel"
             mc:Ignorable="d" 
             d:DesignHeight="720" d:DesignWidth="1280" Name="alUO">
    <UserControl.Resources>
        <vm:GameViewModel  x:Key="GameViewModel"/>
    </UserControl.Resources>
    <Grid DataContext="{Binding Source={StaticResource GameViewModel}}">
        <Grid.Background>
            <ImageBrush ImageSource="/Prog korny;component/Pictures/background.png"/>
        </Grid.Background>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="2*" />
            <ColumnDefinition Width="5*" />
            <ColumnDefinition Width="3*" />
            <ColumnDefinition Width="4*" />
            <ColumnDefinition Width="3*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="7*" />
            <RowDefinition Height="1*" />
            <RowDefinition Height="6*" />
            <RowDefinition Height="1*" />
        </Grid.RowDefinitions>
        <Canvas Grid.ColumnSpan="5" Grid.RowSpan="4"></Canvas>
        <TextBox x:Name="txtText" Grid.Column="2" Grid.Row="1" Grid.ColumnSpan="1" Background="Transparent" Foreground="White" BorderBrush="Blue" FontFamily="Bebas Neue" FontSize="35" TextAlignment="Center" VerticalAlignment="Center" Cursor="Hand">
            <TextBox.Text>
                <Binding Path="textContent" UpdateSourceTrigger="PropertyChanged"/>
            </TextBox.Text>
        </TextBox>
        <Label x:Name="lblLevel" Grid.Column="0" Grid.Row="4" Grid.ColumnSpan="1"  Foreground="White" BorderBrush="{x:Null}" FontFamily="Bebas Neue" FontSize="30" Cursor="Hand">
            <Label.Content>
                <Binding Path="LevelLabel" UpdateSourceTrigger="PropertyChanged"/>
            </Label.Content>
        </Label>
        <Label x:Name="lblScore" Grid.Column="4" Grid.Row="4" Grid.ColumnSpan="1" Foreground="White" BorderBrush="{x:Null}" FontFamily="Bebas Neue" FontSize="30" Cursor="Hand">
            <Label.Content>
                <Binding Path="ScoreLabel" UpdateSourceTrigger="PropertyChanged"/>
            </Label.Content>
        </Label>
    </Grid>
</UserControl>

您可以定义一个属性,该属性将与xaml页面中的width属性绑定。 可以根据给定的条件从viewmodel控制属性。 您可以控制窗口xaml页面中几乎所有可用的内容。此外,您还可以基于两个属性的配对定义条件逻辑。 例如,如果TextContent属性达到某个限制,则将text width属性设置为某个值

通过低级别的控制,您可以通过数据触发器实现宽度控制

<Style>
  <Setter Property="Width" Value="200"/>
  <Style.Triggers>
    <<Put your conditions which will set the value>>
  </Style.Triggers>
</Style>

为什么要动态地执行此操作?只需使文本框具有足够的宽度,以容纳从get go开始的最长预期单词,并适当设置网格列的宽度。做起来容易多了……你试过将文本框宽度设置为自动吗?@elgonzo,因为我需要它@DarkTemplar我试过了,没用可能是我的主意,但我希望有一个更简单的解决方案。@AME也可以有其他方法,但我怀疑你的更简单的解决方案,因为你需要什么样的数据绑定来满足你需要的控制级别。如果你要求If进行少量控制,即你确切地知道你需要保持多少宽度以及在什么条件下,那么你可以选择数据触发器或其他类型样式触发器。我已编辑了一个此类引用的答案。
<Style>
  <Setter Property="Width" Value="200"/>
  <Style.Triggers>
    <<Put your conditions which will set the value>>
  </Style.Triggers>
</Style>