2012-03-18 2 views
1

Есть ли способ равномерно размещать радиокнопки, включая текст радиообъектива? Я пробовал StackPanel с Orientation = Horizontal, DockPanel и UniformGrid, но я не добился точного взгляда, за которым я получаю четное количество пробелов между элементами управления без необходимости обертывания или усечения текста.Radiobutton Even Горизонтальное выравнивание

StackPanel Alignment Horizontal

UniformGrid One Row

<GroupBox Name="grpLegend" Header="{x:Static res:Strings.ChartOptionsDisplayControlView_GroupBox_Legend}"> 
       <ItemsControl 
        ItemsSource="{Binding IsAsync=True, Path=AvailablePitchbookLegendPosition}"> 
        <ItemsControl.ItemTemplate> 
         <DataTemplate> 
          <RadioButton 
           Content="{Binding IsAsync=True, Path=DisplayName}" 
           IsChecked="{Binding IsAsync=True, Path=IsSelected}" 
           GroupName="LegendPosition" 
           Margin="2,3.5" /> 
         </DataTemplate> 
        </ItemsControl.ItemTemplate> 
        <ItemsControl.ItemsPanel> 
         <ItemsPanelTemplate> 
          <StackPanel Orientation="Horizontal"/> 
         </ItemsPanelTemplate> 
        </ItemsControl.ItemsPanel> 
       </ItemsControl> 
      </GroupBox> 

ответ

3
<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition/> 
     <ColumnDefinition Width="Auto"/> 
    </Grid.ColumnDefinitions> 

    <RadioButton Grid.Column="0" Content="Left"/> 
    <RadioButton Grid.Column="1" HorizontalAlignment="Center" Content="Center"/> 
    <RadioButton Grid.Column="2" Content="Right"/> 
</Grid> 

Если эта сетка была частью списка в ItemTemplate и вы хотите синхронизировать ширину столбцов GRID Вам необходимо использовать свойство SharedSizeGroup.

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" SharedSizeGroup="c1"/> 
     <ColumnDefinition SharedSizeGroup="c2"/> 
     <ColumnDefinition Width="Auto" SharedSizeGroup="c3"/> 
    </Grid.ColumnDefinitions> 

    <RadioButton Grid.Column="0" Content="Left"/> 
    <RadioButton Grid.Column="1" HorizontalAlignment="Center" Content="Center"/> 
    <RadioButton Grid.Column="2" Content="Right"/> 
</Grid> 

, а затем на соответствующий родительский контейнер используйте прилагаемую Grid.IsSharedSizeScope свойства = «истинную»

<ListBox Grid.IsSharedSizeScope="True" ItemTemplate={StaticResource RadioButtonTemplate}/> 
+0

Спасибо за ваш ответ. Это определенно работает со статическими элементами. Мне было интересно, как это будет работать с динамической коллекцией и, следовательно, с потенциально переменным числом радиообъектов. – dior001

+0

Обновленный ответ. Посмотрите Grid.IsSharedSizeScope для получения дополнительных примеров. – Phil

+0

Спасибо за это. Я знаю, что ваш ответ работает, но я не смог успешно применить его в своем ItemsControl. Я смущен тем, как вы привязываете данные коллекции к шаблону, содержащему 3 радиообмена, а не один. Если я это сделаю, я просто получаю 9 радиобарабанов, а не 3. Это только моя нехватка знаний XAML. – dior001

Смежные вопросы