Проблема с настройкой ширины ColumnDefinition

WPF
  1. 5 года назад

    Здравствуйте, Возникла следующая проблема: Мне необходимо установить размеры двух колонок так, чтобы ширина первой выравнивалась по содержимому ширина второй занимала оставшееся пространство, согласно тому как я поняла теорию нужен код:

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

    Однако ширина колонок все время оказывается равной. Этот код находится в шаблоне элемента управления DataFormDataField - поле формы данных.
    То есть в первой колонке находится элемент управления Label, во второй редактируемый TextBox.

  2. Alexandr_Erohin

    Sep 24 Администратор
    Добавлено 5 года назад Alexandr_Erohin

    Найти это сообщение Anastasiya Однако ширина колонок все время оказывается равной

    Не может такого быть, проверил на следующем коде:

    <Grid ShowGridLines="True">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <Label Content="Sample Text" Margin="10"></Label>
            <TextBox Grid.Column="1" Text="Sample Text" Margin="10" ></TextBox>
    </Grid>

    Приведите весь код шаблона, возможно в нем проблема

  3. Добавлено 5 года назад Anastasiya

    Код шаблона (я его значительно сократила, но и с этим кодом проблема актуальна)

    <ControlTemplate x:Key="DataFormDataFieldStyle1" TargetType="{x:Type telerik:DataFormDataField}">
                     <Border x:Name="PART_RootElement" >
                          <Grid  x:Name="PART_DataFormDataFieldGrid" ShowGridLines="True"  >
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                                    
                                  <Label x:Name="PART_Label" Content="Sample Text" Margin="5,0"></Label>
                                  <TextBox x:Name="PART_ContentPresenter" Grid.Column="1"  Margin="5,0" ></TextBox>
                                   
                          </Grid>
                     </Border>
            </ControlTemplate>

    При этом, действительно, если код используется как самостоятельный, то все нормально; если в качестве шаблона, то размеры колонок равны.

  4. Alexandr_Erohin

    Sep 24 Администратор

    Вы используете предопределенные названия частей шаблона (PART_RootElement, PART_DataFormDataFieldGrid) которые определяют начальную функциональность элемента. В данном случае элемент PART_DataFormDataFieldGrid переопределяет компоновку Grid указанную в вашем шаблоне на компоновку в базовом. Попробуйте так:

    <ControlTemplate x:Key="DataFormDataFieldStyle1" TargetType="{x:Type telerik:DataFormDataField}">
                <Border x:Name="PART_RootElement" >
                    <Grid ShowGridLines="True"  >
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
    
                        <Label x:Name="PART_Label" Content="Sample Text" Margin="5,0"></Label>
                        <TextBox x:Name="PART_ContentPresenter" Grid.Column="1"  Margin="5,0" ></TextBox>
    
                    </Grid>
                </Border>
    </ControlTemplate>

    Здесь я убрал явно название элемента Grid. Но имейте ввиду, что и функциональность, определенная в базовом шаблоне будет потеряна, если она вообще есть (с библиотекой telerik мало работал).

или зарегистрируйтесь чтобы ответить