2017-11-22 8 views
0

C#コード(つまりXAMLではなく)を使用してDataValueにRowValidationErrorTemplateを追加します。 は、対応するXAML:あなたは、この背後にある理由を不思議に思う場合RowValidationErrorTemplateをDataGridに動的に追加する方法は?

<DataGrid.RowValidationErrorTemplate> 
    <ControlTemplate> 
     <Grid Margin="0,-2,0,-2" 
       ToolTip="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}, Path=(Validation.Errors)[0].ErrorContent}"> 
      <Ellipse StrokeThickness="0" Fill="Red" Width="{TemplateBinding FontSize}" 
        Height="{TemplateBinding FontSize}" /> 
      <TextBlock Text="!" FontSize="{TemplateBinding FontSize}" 
         FontWeight="Bold" Foreground="White" HorizontalAlignment="Center" /> 
     </Grid> 
    </ControlTemplate> 
</DataGrid.RowValidationErrorTemplate> 

、ここに私の状況は次のとおりです。

  1. 私は.csファイルのコードを継承し、いくつかののUserControlを持っています。
  2. ユーザーコントロールがありDataGridの含まれています。私は今、私が探している、基底クラスへのEventHandlerを移動RowValidationErrorTemplate、のEventHandler、検証方法、...など

を私の検証コードの最後の部分を基本クラスに移動する方法。

+0

のDataGridから継承し、独自のコントロールを作成しないのはなぜ? – Isma

+0

@Isma、XAMLの継承を意味しますか?これは私が避けようとする非常に複雑なトピックです。だからこそ私のUserControlsは.csコードから継承しています。 –

答えて

1

あなたが動的に作成するXamlReader.Parseメソッドを使用することができControlTemplate

string xaml = "<ControlTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"><Grid Margin=\"0,-2,0,-2\" ToolTip=\"{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}, Path=(Validation.Errors)[0].ErrorContent}\"><Ellipse StrokeThickness=\"0\" Fill=\"Red\" Width=\"{TemplateBinding FontSize}\" Height=\"{TemplateBinding FontSize}\" /><TextBlock Text=\"!\" FontSize=\"{TemplateBinding FontSize}\" FontWeight=\"Bold\" Foreground=\"White\" HorizontalAlignment=\"Center\" /></Grid></ControlTemplate>"; 
dataGrid.RowValidationErrorTemplate = System.Windows.Markup.XamlReader.Parse(xaml) as ControlTemplate; 
+0

ありがとうございました。 'ControlTemplate'を編集する唯一の方法はXAML形式を使用することですか? XAMLに対応するクラスとプロパティはありませんか? –

+1

はい、FrameworkElementFactoryはありますが、それを使用することは、MSDNで述べたように、プログラムでテンプレートを作成することは推奨されていません。https://msdn.microsoft.com/en-us/library/system.windows.frameworkelementfactory(v=vs.110) ).aspx – mm8

+0

ありがとうございます。また、「テンプレートをプログラムで作成するには、XamlReaderクラスのLoadメソッドを使用して文字列またはメモリストリームからXAMLを読み込む方法をお勧めします。 –

関連する問題