0

どうすれば次のことができますか:

<Window x:Class="MyClientsWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Login" WindowStartupLocation="CenterScreen"
    SizeToContent="WidthAndHeight" 
    MaxWidth="800" MaxHeight="600">

  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto" />
      <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="Auto" Name="labelColumn"/>
      <ColumnDefinition Width="2*" Name="entryColumn"/>
    </Grid.ColumnDefinitions>

    <TextBlock Grid.Row="0" Text="First name: " Name="firstNameLabel"
               Margin="4" VerticalAlignment="Center"/>
    <TextBox Grid.Row="0" Grid.Column="1" 
             Margin="4" HorizontalAlignment="Stretch"  />
    <TextBlock Grid.Row="1" Text="Last name: " Name="lastNameLabel"
               Margin="4" VerticalAlignment="Center"/>
    <TextBox Grid.Row="1" Grid.Column="1" 
             Margin="4" HorizontalAlignment="Stretch"  />
  </Grid>

2 番目の列の幅は最初の列の 2 倍にする必要がありますが、最初の列の幅は自動的に決まり、フォント ファミリ、フォント サイズなどによって異なります。

4

1 に答える 1

1

それがベストアンサーかどうかはわかりませんが、2つのアプローチを見つけました。

1)

<ColumnDefinition Width="*" Name="entryColumn" MinWidth="{Binding 
                ElementName=firstNameLabel, Path=ActualWidth}, 
                Converter={StaticResource MultiplyByTwoConverter}"/>

2)コードビハインドのWindow.Loadedイベントハンドラー内:

private void onLoaded(object sender, RoutedEventArgs e)
{
     entryColumn.MinWidth = labelColumn.ActualWidth * 2;
}

1つ目はデザインモードでも機能しますが、2つ目は機能しません。以下はデザインモードでは機能しますが、実行時には機能しません。

<ColumnDefinition Width="*" Name="entryColumn" MinWidth="{Binding 
                ElementName=labelColumn, Path=ActualWidth}, 
                Converter={StaticResource MultiplyByTwoConverter}"/>
于 2012-09-02T01:51:12.787 に答える