상호 작용 트리거부 DataTemplate 작동하지 않으로 XamlReader

0

질문

내가 노력으로 구문 분석 XamlReader.Load() a DataTemplate (WPF datagrid)동적으로 만들어서 뒤에 코드:

DataTemplate dataTemplate;

StringReader template = new StringReader($@"
<DataTemplate
    xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
    xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""
    xmlns:local=""clr-namespace:MyApp;assembly=MyApp"">
<DataTemplate.Resources>
    <local:ArrayMultiValueConverter x:Key=""arrayMultiValueConverter""/>
</DataTemplate.Resources>
    <StackPanel Orientation=""Vertical"">
        <Expander VerticalAlignment=""Center"" xmlns:i=""http://schemas.microsoft.com/xaml/behaviors"">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName=""IsExpanded"">
                <i:InvokeCommandAction Command=""{{Binding DataContext.TextFilterColumn}}""/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
            <Expander.Header>
                <TextBlock x:Name=""{dtColumnName}"" VerticalAlignment=""Center"" Text=""{{TemplateBinding Content}}"" Margin=""5,5,5,0"" FontWeight=""SemiBold""/>
            </Expander.Header>
            <StackPanel Orientation=""Horizontal"">
                <TextBox x:Name=""{"TbxFilter" + dtColumnName}"" Width=""100"" Margin=""5""/>
                <TextBlock Margin=""0,0,5,0"" VerticalAlignment=""Center"" FontFamily=""Segoe MDL2 Assets"">
                    <Hyperlink TextDecorations=""{{x:Null}}"" Command=""{{Binding DataContext.FilterColumnName, RelativeSource={{RelativeSource FindAncestor, AncestorType={{x:Type Window}}}}}}"">
                        <Hyperlink.CommandParameter>
                            <MultiBinding Converter=""{{StaticResource arrayMultiValueConverter}}"">
                                <Binding Path=""Text"" ElementName=""{dtColumnName}"" />
                                <Binding Path=""Text"" ElementName=""{"TbxFilter" + dtColumnName}"" />
                            </MultiBinding>
                        </Hyperlink.CommandParameter>   
                        &#xE721;
                    </Hyperlink>
                </TextBlock>
                <TextBlock Margin=""0,0,5,0"" VerticalAlignment=""Center"" FontFamily=""Segoe MDL2 Assets"">
                    <Hyperlink TextDecorations=""{{x:Null}}"" Command=""{{Binding DataContext.FilterColumnName, RelativeSource={{RelativeSource FindAncestor, AncestorType={{x:Type Window}}}}}}"">
                        <Hyperlink.CommandParameter>
                            <MultiBinding Converter=""{{StaticResource arrayMultiValueConverter}}"">
                                <Binding Path=""Text"" ElementName=""{dtColumnName}""/>
                                <Binding Path=""Text"" RelativeSource=""{{RelativeSource FindAncestor, AncestorType={{x:Type TextBlock}}}}""/>
                            </MultiBinding>
                        </Hyperlink.CommandParameter>
                        &#xe75c;
                    </Hyperlink>
                </TextBlock>
            </StackPanel>
        </Expander>
    </StackPanel>
</DataTemplate>
");

XmlReader xmlReader = XmlReader.Create(template);
dataTemplate = XamlReader.Load(xmlReader) as DataTemplate;

textColumn.HeaderTemplate = dataTemplate;

모든 작동하는 경우를 제거이 부분의 코드:

<i:Interaction.Triggers>
    <i:EventTrigger EventName=""IsExpanded"">
        <i:InvokeCommandAction Command=""{{Binding DataContext.TextFilterColumn}}""/>
    </i:EventTrigger>
</i:Interaction.Triggers>

하지만 내가 그것을 추가,가 Exception Thrown :

시스템입니다.Windows.마크업이 있습니다.XamlParseException:"설정할 수 없는 알 수 없는 구성원 '{http://schemas.microsoft.com/xaml/behaviors}의 상호 작용입니다.트리거'.' 선수'11'와 라인에 위치'10'.'

내가 사용하는"XAML 행동"다음과 같은 이 문서(하지만 같은 일 Interactivity):

https://devblogs.microsoft.com/dotnet/open-sourcing-xaml-behaviors-for-wpf/

그것이 문제가 될 것으로 보인과 XamlReader.Load(xmlReader).

누군가가 해결 방법,나는 감사하게 될 것입니다.

구성:

  • Framework4.8(고 4.7.2)
  • Microsoft.Xaml.행동을 합니다.Wpf 1.1.39

감사합니다.

c# eventtrigger wpf xamlreader
2021-11-22 22:56:54
1

최고의 응답

2

그것은에서 언급되지 않 doucmentation 의 XamlReader.부하 하지만 어떤 사용자 지정 어셈블리에서 참조하는 XAML 네임스페이스에 매핑을 이미 사용할 수 있습니다.

여기에는 두 가지 옵션이 있습니다.

1.드 어셈블리 Microsoft.Xaml.Behaviors 또는 초기화를 몇 가지 유형 어셈블리에서 읽기 전에 xaml 입력합니다.

Assembly assembly = Assembly.LoadFrom("Microsoft.Xaml.Behaviors.dll");

var et = new Microsoft.Xaml.Behaviors.EventTrigger();

2.사용 CLR 네임스페이스 선언 xaml

xmlns:i=""clr-namespace:Microsoft.Xaml.Behaviors;assembly=Microsoft.Xaml.Behaviors""
2021-11-26 11:25:19

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................