2017-11-22 13 views
0

C# 코드 (예 : XAML이 아님)를 사용하여 DataGrid에 RowValidationErrorTemplate을 추가하려고합니다. 대응 XAML : 나는 여러 된 UserControls에게 .cs 코드에서 상속RowValidationErrorTemplate을 DataGrid에 동적으로 추가하는 방법은 무엇입니까?

  1. : 여기 당신이 뒤에 이유를 궁금해하는 경우

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

    , 내 상황입니다.

내가 기본 클래스에 EventHandlers 이동, 지금 내가 찾고 RowValidationErrorTemplate, EventHandlers, 검증 방법, ... 등 :

  • UserControl을이있는 데이터 그리드을 포함 내 유효성 검사 코드의 마지막 부분을 기본 클래스로 이동하는 방법입니다.

  • +0

    데이터 그리드에서 상속 자신의 컨트롤을 만드는없는 이유는 무엇입니까? – Isma

    +0

    @ 아이 스마, 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

    고마워요. XAML 형식을 사용하여 'ControlTemplate'을 편집하는 유일한 방법은 무엇입니까? XAML에 해당하는 클래스 및 속성이 있습니까? –

    +1

    예, FrameworkElementFactory가 있지만이를 사용하면 MSDN에 명시된대로 프로그래밍 방식으로 템플릿을 만드는 대신 사용되지 않습니다. https://msdn.microsoft.com/en-us/library/system.windows.frameworkelementfactory(v=vs.110)) .aspx – mm8

    +0

    감사합니다. 그리고 그들은 "프로그래밍 방식으로 템플릿을 만드는 권장 된 방법은 XamlReader 클래스의 Load 메서드를 사용하여 문자열이나 메모리 스트림에서 XAML을로드하는 것입니다." –