2016-12-23 7 views
2

GridベースのItemsControlを使用して、一連のプロパティを表示しています。利用可能なスペースが小さすぎる場合、制御は次のようにレンダリングされる:グリッド列に共有サイズグループの横に最小幅を与える

Problem

項目ごとDataTemplateラベル用SharedSizeGroupGridを使用します。私が望むのは、入力ボックスに50pxという最小幅を与え、必要に応じてラベルの幅を小さくすることです。 MinWidthを設定しようとすると、ボックスはグリッドの外側にレンダリングされます。SharedSizeGroupのように常に優先順位が高くなりました。

ここに関連するXAMLがあります。各項目のデフォルトのテンプレート...

<DataTemplate DataType="{x:Type local:ViewModel+PropertyWrapper}"> 
    <Grid Margin="2"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" SharedSizeGroup="Key"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <TextBlock Grid.Column="0" x:Name="PLabel" Text="{Binding Name}" Margin="0,0,4,0"/> 
     <TextBox Grid.Column="1" Text="{Binding Value}"/> 
    </Grid> 
</DataTemplate> 

...と周りに他の方法をお試しくださいリスト

<ItemsControl x:Key="PropertyListNoFill" x:Shared="False" Margin="0,3,0,0" Background="{x:Null}" BorderBrush="{x:Null}" 
       ItemsSource="{Binding}" 
       Grid.IsSharedSizeScope="True" 
       HorizontalContentAlignment="Stretch" 
       ItemTemplateSelector="{StaticResource PropertyTemplateSelector}" > 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <DockPanel LastChildFill="False" IsItemsHost="True"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemContainerStyle> 
     <Style> 
      <Setter Property="DockPanel.Dock" Value="Top"/> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
</ItemsControl> 

答えて

1

を生成するために使用されるコード。

MinWidthを2番目の列に設定する代わりに、最初にMaxWidthを置きます。 DataTemplate

<Grid.ColumnDefinitions> 
    <ColumnDefinition 
     SharedSizeGroup="Key" 
     MaxWidth="{Binding ActualWidth, 
          RelativeSource={RelativeSource AncestorType={x:Type Grid}}, 
          Converter={StaticResource WidthConverter}}"/> 
    <ColumnDefinition /> 
</Grid.ColumnDefinitions> 
インサイド Converter

public class WidthConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     double gridWidth = (double)value; 
     return gridWidth - 50; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

を使用して

関連する問題