我該怎麼做?我想擺脫在每個無效的datagrid單元上顯示的令人討厭的紅色邊框。如何擺脫DataGrid單元格無效時的紅色邊框?
6
A
回答
2
將ValidatesOnDataErrors和ValidatesOnExpcetions設置爲False,以便綁定您的單元格。 如果你想要你的驗證,那麼你必須爲驗證控件提供驗證模板。請參考我的答案在這裏 - Validation Error Style in WPF, similar to Silverlight
1
我討厭紅色邊框,因爲它被放置在裝飾器和裝飾器坐在窗口的頂部,這意味着如果你的元素是部分/完全由另一個元素是隱藏的(像它是在網格中)全裝修仍然顯示:(
這並不意味着我不想要一些定製,雖然,所以我仍然可以突出顯示我的項目粉紅色,或改變他們的前景,讓DataGridCell正確剪輯一切都關閉了,你可以通過使用風格觸發器來做到這一點
希望這可以幫到你
<DataGrid.Resources>
<Style TargetType="{x:Type TextBlock}" x:Key="TextBlockErrorStyle">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<!-- Just the adorned element means NO RED BORDER -->
<AdornedElementPlaceholder Name="controlWithError" />
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="Background" Value="Pink"/>
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
...
<DataGridTemplateColumn Header="Description" MinWidth="150">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Description, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, NotifyOnValidationError=True}"
Style="{StaticResource ResourceKey=TextBlockErrorStyle}"
/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
1
我有同樣的問題,但在我的情況我沒有使用IDataError
或INotifyDataErrorInfo
。我正在使用自定義ValidationRule
和樣式來處理我的驗證邏輯和演示文稿。我已經在使用DataGrid RowStyle
爲有錯誤的行顯示自定義樣式,所以我認爲使用DataGridCell做類似的事情會很容易。
注意事項:
你不能只定義樣式,並設置
DataGrid.CellStyle
。相反,您必須使用ElementStyle
和/或EditingElementStyle
。樣式
TargetType
必須與單元格正在使用的DataGridColumn類型相匹配。所以對於一個DataGridComboBoxColumn的TargetType
應該ComboBox
DataGrid列XAML:
<DataGridComboBoxColumn Header="Column1"
ItemsSource="{Binding Path=Column1Path}"
DisplayMemberPath="Column1DisplayPath"
ElementStyle="{StaticResource DGComboColValidationStyle}"
EditingElementStyle="{StaticResource DGComboColValidationStyle}">
<DataGridComboBoxColumn.SelectedItemBinding>
<Binding Path="Column1Path" UpdateSourceTrigger="LostFocus">
<Binding.ValidationRules>
<Validation:CustomValidationRule ValidationStep="UpdatedValue" ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
</DataGridComboBoxColumn.SelectedItemBinding>
</DataGridComboBoxColumn>
樣式定義
<Style x:Key="DGComboColValidationStyle" TargetType="{x:Type ComboBox}">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Grid>
<Border BorderThickness="1"
BorderBrush="{Binding ElementName=adorner1, Path=DataContext[0].ErrorContent.ValidationType, Converter={StaticResource ValidationTypeColorConverter}}"
CornerRadius="3">
</Border>
<AdornedElementPlaceholder Name="adorner1"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="DGTextColValidationStyle" TargetType="{x:Type TextBlock}">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Grid>
<Border BorderThickness="1"
BorderBrush="{Binding ElementName=adorner2, Path=DataContext[0].ErrorContent.ValidationType, Converter={StaticResource ValidationTypeColorConverter}}"
CornerRadius="3">
</Border>
<AdornedElementPlaceholder Name="adorner2"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="DGRowValidationStyle" TargetType="{x:Type DataGridRow}">
<Setter Property="ValidationErrorTemplate">
<Setter.Value>
<ControlTemplate x:Name="DGRowValidationTemplate">
<Grid>
<Ellipse Width="12" Height="12" Stroke="Black" StrokeThickness="0.5"
Fill="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}, Path=(Validation.Errors)[0].ErrorContent.ValidationType, Converter={StaticResource ValidationTypeColorConverter}}"/>
<TextBlock FontWeight="Bold" Padding="4,0,0,0"
Margin="0" VerticalAlignment="Top" Foreground="White" Text="!"
ToolTip="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}, Path=(Validation.Errors)[0].ErrorContent.ValidationMessage}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="BorderThickness" Value="2"/>
<Setter Property="BorderBrush" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent.ValidationType, Converter={StaticResource ValidationTypeColorConverter}}"/>
</Trigger>
<Trigger Property="Validation.HasError" Value="false">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="BorderBrush" Value="Transparent" />
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="DGCellStyle" TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="false">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="BorderBrush" Value="Transparent" />
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}, Path=(Validation.Errors)[0].ErrorContent.ValidationMessage}"/>
</Trigger>
</Style.Triggers>
</Style>
0
6
您可以在此行只是添加到您的DataGrid:
<DataGrid Validation.ErrorTemplate="{x:Null}" />
相關問題
- 1. 如何擺脫這個表格邊框?
- 2. 如何擺脫邊框
- 3. 擺脫WPF中的按鈕紅色邊框?
- 4. 擺脫ImageIcon的框邊框
- 5. 單擊表單輸入字段時如何擺脫藍色外邊框?
- 6. 無法擺脫Safari的圖像邊框
- 7. 如何擺脫IE8 iframe的邊框
- 8. 如何擺脫惱人的iframe邊框?
- 9. Flex驗證器 - 在DataGrid單元格上顯示紅色錯誤邊框
- 10. 如何擺脫框架和框架之間的單個邊界?
- 11. 如何擺脫火狐文本和TextArea上的黑色邊框?
- 12. 如何擺脫小部件邊框?
- 13. 網格和列表框有一些邊框我無法擺脫
- 14. 如何擺脫IE8的「<a」元素下的藍色圖像邊框?
- 15. 如何在div元素的邊緣擺脫這些神祕的灰色框?
- 16. 刪除DataGrid單元格點邊框?
- 17. 如何擺脫IE中表格單元格內dijit.form.DropDownButton旁邊的空白空間?
- 18. 如何擺脫JavaFX中拆分窗格周圍的邊框?
- 19. 如何擺脫wordpress中的表格邊框?
- 20. 如何擺脫使用Graphviz HTML表格的邊框間距?
- 21. Tk Tablelist,如何在表格單元格中製作紅色邊框
- 22. 如何擺脫邊距
- 23. 擺脫<input>框中的邊框
- 24. 如何隱藏wpf工具箱datagrid中單元格的邊框?
- 25. 擺脫datagrid標題邊框(在列resize grabber處)
- 26. 使用PdfWriter我無法擺脫似乎是表格邊框
- 27. 無法擺脫HTML表格邊框 - 用截圖和jfFiddle
- 28. 如何擺脫excel單元右下角的黑色箭頭?
- 29. Ng-grid擺脫單元格填充
- 30. 擺脫文本框驗證邊框
我想它來驗證數據。但我想更改默認的紅色邊框樣式。 –
我已經更新了我的答案。請看一看。 –