Как изменить ширину границы ValidationErrorTemplate? - PullRequest
0 голосов
/ 29 января 2019

Всякий раз, когда пользователь вводит недопустимое значение в 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>

, который, в свою очередь, назначается сетке данных следующим образом:

  <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>
...