Я хочу установить MinWidth столбца сетки, который должен быть суммой фактической ширины метки и кнопки управления внутри другой сетки, помещенной внутри ячейки столбца , Для этой цели я использую класс Converter, но выясню часть XAML. конвертер здесь:Как связать Сумма ширины двух элементов управления до MinWidth другого элемента управления
class StringSumtoIntConverter : IMultiValueConverter
{
public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture)
{
int sum = 0;
foreach (var item in value)
{
sum += System.Convert.ToInt32(item);
}
return sum;
}
//...Other implementations
}
XAML код, который я написал до сих пор:
xmlns:helperClasses="clr-namespace:EmbroidaryManagementSystem_V2._0.HelperClasses" <!--Import class-->
<helperClasses:StringSumtoIntConverter x:Key="StringSumtoIntConvert"/> <!--Inside Window.Resources tag-->
<ColumnDefinition Width="48*"> <!--Inside Grid-->
<ColumnDefinition.MinWidth>
<MultiBinding Converter="{StaticResource StringSumtoIntConvert}">
<Binding Path=""></Binding>
</MultiBinding>
</ColumnDefinition.MinWidth>
</ColumnDefinition>
Полная реализация XAML здесь:
<Window x:Class="EmbroidaryManagementSystem_V2._0.View.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:EmbroidaryManagementSystem_V2._0.View"
xmlns:y="clr-namespace:EmbroidaryManagementSystem_V2._0.ViewModel.CollectionsViewModel"
xmlns:helperClasses="clr-namespace:EmbroidaryManagementSystem_V2._0.HelperClasses"
mc:Ignorable="d"
Title="MainWindow" Height="655.512" Width="1120.159" FontSize="24" WindowStartupLocation="CenterScreen"
>
<Window.Resources>
<helperClasses:StringSumtoIntConverter x:Key="StringSumtoIntConvert"/>
</Window.Resources>
<Window.DataContext>
<y:ClientCollectionVM/>
</Window.DataContext>
<Grid HorizontalAlignment="Left" Height="622" VerticalAlignment="Top" Width="1110" Background="#FFD6DBE9">
<Grid.RowDefinitions>
<RowDefinition Height="89*"/>
<RowDefinition Height="39*"/>
<RowDefinition Height="494*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="137*"/>
<ColumnDefinition Width="48*">
<ColumnDefinition.MinWidth>
<MultiBinding Converter="{StaticResource StringSumtoIntConvert}">
<Binding Path=""></Binding>
</MultiBinding>
</ColumnDefinition.MinWidth>
</ColumnDefinition>
</Grid.ColumnDefinitions>
<GridSplitter x:Name="gridSplitter" Grid.Column="1" HorizontalAlignment="Left" Height="533" Grid.Row="1"
VerticalAlignment="Top" Width="2" Grid.RowSpan="2"/>
<Grid Grid.Column="1" Height="35" Background="#FF657695"
Grid.Row="1" VerticalAlignment="Top">
<Label x:Name="lblNotificationsHeader" Content="Notifications" HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="14.667" Height="30" Foreground="#FFEBF0EE"/>
<Button x:Name="btnNotificationsClose" Content="X"
Margin="0,5,8,0" VerticalAlignment="Top" Width="20" FontFamily="Verdana" HorizontalAlignment="Right" Background="Transparent" FontSize="13.333" Foreground="Black"/>
</Grid>
</Grid>
Также есть ошибка: Невозможно применить объект типа «EmbroidaryManagementSystem_V2._0.ViewModel.Coll ectionsViewModel.ClientCollectionVM 'для ввода «System.IConvertible». В строке:
<MultiBinding Converter="{StaticResource StringSumtoIntConvert}">
<Binding Path=""></Binding>
</MultiBinding>
Я не знаю, почему.
Это сработало, но теперь возникла другая проблема. На самом деле есть разделитель между столбцами (я повторно добавил его код, который был ранее удален по ошибке по ошибке). И проблема заключается в том, что я изменяю размер вправо, а метка уведомлений выходит за границу Grid, ее ActualWidth уменьшается (пока я заметил использование отладчика), и конвертер называется повторно с уменьшенной шириной каждый раз. Я хочу, чтобы этот ActualWidth был установлен как самое начальное значение. –
Создание ширины первого и второго столбцов для «*» и «Авто» не помогло. Я также попытался установить MinWidth внутренней сетки, и это тоже не помогло. Я поместил ярлык и кнопку в том же столбце и строке только из-за отсутствия очевидной необходимости отделить их. –
Ну, основная концепция, которой я отсутствовала, - горизонтальные и вертикальные выравнивания GridSplitter. Я поместил GridSplitter в свой собственный, как вы предложили, а затем сделал оба выравнивания «Центр». Таким образом, я смог контролировать размер как первого, так и третьего столбцов, после чего мне пришлось поддерживать MinWidth TabControl в первом столбце. Так что спасибо за тонну за вашу помощь. Я избегал каких-либо кодовых вещей в этом представлении, потому что я новичок в WPF, и я просто хотел поэкспериментировать в XAML. –