#wpf #ribbon
#wpf #лента
Вопрос:
Я создавал интерфейс при использовании элемента управления Ribbon, где столкнулся с этой проблемой. Это объясняется на скриншотах ниже.
Разметка XAML как таковая.
<ribbon:RibbonGroup x:Name="PSO2" Header="Data Entry Section">
<ribbon:RibbonTextBox Label="x1_min" SmallImageSource="Images/Document.png" TextBoxWidth="50"/>
<ribbon:RibbonTextBox Label="x1_max" SmallImageSource="Images/Document.png" TextBoxWidth="50"/>
<ribbon:RibbonTextBox Label="x2_min" SmallImageSource="Images/Document.png" TextBoxWidth="50"/>
<ribbon:RibbonTextBox Label="x2_max" SmallImageSource="Images/Document.png" TextBoxWidth="50"/>
<ribbon:RibbonTextBox Label="Iterations" SmallImageSource="Images/Document.png" TextBoxWidth="50"/>
Я хотел, чтобы текстовые поля были точно выровнены, однако независимо от того, что я делал, они не выравнивались. Установка или отключение свойства TextBoxWidth также не помогло. Какие-либо решения? Извините, у меня репутация <10, поэтому я не смог опубликовать изображение напрямую.
Спасибо за любую помощь.
Комментарии:
1. разместите разметку xaml для x1 max здесь
2. Написал @Sivasubramanian. Должен ли я опубликовать полный XAML?
3. Привет, попробуйте удалить тег SmallImageSource в вашем XAML и сообщите мне, можете ли вы правильно его выровнять??
4. Также почему выравнивание / поле элемента управления не задано??
5. @Sivasubramanian проблема сохраняется: (Это выглядит еще хуже! Настройка выравнивания / поля не устраняет проблему.
Ответ №1:
Это немного халтурно, но решение, которое я нашел, состоит в том, чтобы забыть о попытке выровнять элементы непосредственно с помощью элементов управления выравниванием элементов ленты и выровнять элементы с помощью сетки внутри RibbonGroup
Первая проблема заключается в том, что сама сетка не выравнивается должным образом внутри группы лент, но я решил эту проблему, привязав ширину сетки к ширине группы лент, поэтому ее размер будет изменяться по мере изменения размера группы лент.
2-й — выравнивание меток, поскольку метка является частью элемента RibbonTextBox
управления. Решение состоит в том, чтобы использовать другой элемент управления для предоставления текстовой метки ( Label
или TextBlock
) и просто оставить RibbonTextBox.Label
пустым.
<RibbonGroup x:Name="PSO2" Header="Data Entry Section" Width="270">
<Grid Width="{Binding ElementName=PSO2, Path=ActualWidth}" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Text="x1_min" Grid.Column="0" Grid.Row="0" />
<RibbonTextBox Label="" SmallImageSource="Images/Document.png" TextBoxWidth="50" Grid.Column="1" Grid.Row="0"/>
<TextBlock Text="x1_max" Grid.Column="0" Grid.Row="1" />
<RibbonTextBox Label="" SmallImageSource="Images/Document.png" TextBoxWidth="50" Grid.Column="1" Grid.Row="1"/>
<TextBlock Text="x2_min" Grid.Column="0" Grid.Row="2" />
<RibbonTextBox Label="" SmallImageSource="Images/Document.png" TextBoxWidth="50" Grid.Column="1" Grid.Row="2"/>
<TextBlock Text="x2_max" Grid.Column="2" Grid.Row="0" />
<RibbonTextBox Label="" SmallImageSource="Images/Document.png" TextBoxWidth="50" Grid.Column="3" Grid.Row="0"/>
<TextBlock Text="Iterations" Grid.Column="2" Grid.Row="1" />
<RibbonTextBox Label="" SmallImageSource="Images/Document.png" TextBoxWidth="50" Grid.Column="3" Grid.Row="1"/>
</Grid>
</RibbonGroup>
И, используя это, вы получаете RibbonGroup, который выглядит как
Самым большим ограничением является то, что изображение RibbonTextBox будет неуместно между меткой и текстовым полем. Чтобы преодолеть это, вам нужно будет добавить дополнительный набор столбцов и поместить туда значок вместо использования RibbonTextBox.SmallImageSource