Позиционирование UIElement в пользовательском контроле

Я разрабатываю пользовательский элемент управления, где есть TextBox и Button размещены внутри Grid,

Дело в том, когда я устанавливаю пользовательское свойство для UserControl Скажи - влево: кнопка должна отображаться до TextBox, а для правой кнопки должна отображаться на правой стороне текстового поля.

Так как я определяю оба элемента в Grid - Я не в состоянии позиционироваться в соответствии с моими требованиями.

1 ответ

Решение

Если вы должны использовать Grid, Вы можете сделать свой Grid иметь 3 столбца и переключить TextBoxGrid.Column на основе вашего пользовательского свойства.

<Grid>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto" />
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="Auto" />
  </Grid.ColumnDefinitions>
  <Button Grid.Column="1"
          Content="Some Text" />
  <TextBox Text="Test">
    <TextBox.Style>
      <Style TargetType="{x:Type TextBox}">
        <Setter Property="Grid.Column"
                Value="0" />
        <Style.Triggers>
          <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor,
                                                                        AncestorType={x:Type UserControl}},
                                          Path=Left}"
                        Value="True">
            <Setter Property="Grid.Column"
                    Value="2" />
          </DataTrigger>
        </Style.Triggers>
      </Style>
    </TextBox.Style>
  </TextBox>
</Grid>

Вы можете переключить {x:Type UserControl} в DataTrigger на ваш {x:Type CustomUserControl}

Другие вопросы по тегам