Всякий раз, когда пользователь вводит недопустимое значение в DataGridCell, я выделяю всю строку и особенно конкретную ячейку.
Я обнаружил, что когда я снижаться ширину столбца после проверки, красная граница недопустимой ячейки сохраняет свой размер/ширину. т.е. когда я уменьшаю ширину ячейки/столбца, красная рамка остается прежнего размера и теперь достигает следующего столбца.
Когда я увеличиваю ширину столбца, граница идеально адаптируется.
Когда я снова уменьшаю ширину столбца, он также отлично адаптирует ширину границы, но только до исходной ширины ячейки/столбца. Если я уменьшу ширину дальше, минимальная ширина границы будет ее начальной шириной (которая является начальной шириной ячейки/столбца).
Как я могу изменить размер границы до текущей ширины столбца?
<Setter Property = "ValidationErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Grid>
<Border BorderBrush = "red" BorderThickness = "1" Background = "#11FF0000" Opacity = "0.5" IsHitTestVisible = "False" x:Name = "errorBorder"/>
<Ellipse Width = "12" Height = "12" Fill = "Red" Stroke = "Black" StrokeThickness = "0.5"/>
<TextBlock FontWeight = "Bold" Padding = "4,0,0,0" Margin = "0" VerticalAlignment = "Top" Foreground = "White" Text = "!" ToolTip = "{Binding Notification.GetAllErrors}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
Может быть, установить MaxWidth=""? Как я могу это сделать?
Обновление 2019-01-30: Я определяю этот стиль во внешнем Style.xaml и использую его в том же Style.xaml в другом стиле:
<Style x:Key = "NotificationDataGridRow" TargetType = "{x:Type DataGridRow}">
<Setter Property = "FontSize" Value = "16"/>
<Setter Property = "Height" Value = "Auto"/>
<Setter Property = "FontFamily" Value = "ArialMT"/>
<Setter Property = "VerticalAlignment" Value = "Center"/>
<Style.Triggers>
<DataTrigger Binding = "{Binding Path=(Validation.HasError), RelativeSource = {RelativeSource Self}}" Value = "true" >
<Setter Property = "BorderThickness" Value = "1"/>
<Setter Property = "BorderBrush" Value = "Red"/>
<Setter Property = "IsEnabled" Value = "True" />
<Setter Property = "ValidationErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Grid>
<Border BorderBrush = "red" BorderThickness = "1" Background = "#11FF0000" Opacity = "0.5" IsHitTestVisible = "False" x:Name = "errorBorder"/>
<Ellipse Width = "12" Height = "12" Fill = "Red" Stroke = "Black" StrokeThickness = "0.5"/>
<TextBlock FontWeight = "Bold" Padding = "4,0,0,0" Margin = "0" VerticalAlignment = "Top" Foreground = "White" Text = "!" ToolTip = "{Binding Notification.GetAllErrors}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding = "{Binding Path=(Validation.HasError), RelativeSource = {RelativeSource Self}}" Value = "false" >
<Setter Property = "ToolTip" Value = "{x:Null}"/>
<Setter Property = "IsEnabled" Value = "True" />
</DataTrigger>
</Style.Triggers>
</Style>
который, в свою очередь, назначается DataGrid следующим образом:
<Grid KeyboardNavigation.TabNavigation = "Local">
<ct_ctrls:CTDataGrid x:Name = "tagsGrid" ItemsSource = "{Binding}" GridLinesVisibility = "Vertical" AlternatingRowBackground = "#C3DDE5"
AutoGenerateColumns = "False" CanUserAddRows = "True" IsReadOnly = "False"
SelectionUnit = "Cell" SelectionMode = "Extended" BorderThickness = "3" RowStyle = "{StaticResource RawTagDataGridRow}">
<DataGrid.Columns>
<DataGridTextColumn x:Name = "TagName" Header = "Tag" Width = "*"
Binding = "{Binding Mode=TwoWay, Path=RawTag.TagName, UpdateSourceTrigger=PropertyChanged, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}"
ElementStyle = "{StaticResource ResourceKey=textBlockErrStyle}" />
<DataGridTextColumn x:Name = "TagCycle" Header = "Cycle"
Binding = "{Binding Mode=TwoWay, Path=RawTag.Cycle, UpdateSourceTrigger=PropertyChanged, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}"
ElementStyle = "{StaticResource ResourceKey=textBlockErrStyle}">
</DataGridTextColumn>
<DataGridTextColumn x:Name = "TagSource" Header = "Source" Width = "*"
Binding = "{Binding Mode=TwoWay, Path=RawTag.Source, UpdateSourceTrigger=PropertyChanged, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}"
ElementStyle = "{StaticResource ResourceKey=textBlockErrStyle}"/>
<DataGridTextColumn x:Name = "Unassigned" Header = "unassigned" Width = "*" KeyboardNavigation.TabIndex = "4"
Binding = "{Binding Mode=OneWay, Path=RawTag.Unassigned, UpdateSourceTrigger=PropertyChanged, ValidatesOnNotifyDataErrors=False}"
ElementStyle = "{StaticResource ResourceKey=textBlockUnassignedStyle}"/>
<DataGridTemplateColumn x:Name = "editTagColumn" Header = "" CanUserResize = "True" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<WrapPanel>
<Button x:Name = "btnTagDelete" Click = "BtnTagDelete_Click" CommandParameter = "{Binding}" Height = "15" Width = "15" Margin = "2">
<Button.Content>
<Image Source = "../Resources/delete.png"></Image>
</Button.Content>
</Button>
</WrapPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</ct_ctrls:CTDataGrid>
</Grid>
Пожалуйста, смотрите мой обновленный вопрос.





Как вы назначаете
ValidationErrorTemplate(т.е. какой элемент включен)?