Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#WPF基于DataTrigger更改ContentControl内容无效_C#_Wpf_Datatrigger - Fatal编程技术网

C#WPF基于DataTrigger更改ContentControl内容无效

C#WPF基于DataTrigger更改ContentControl内容无效,c#,wpf,datatrigger,C#,Wpf,Datatrigger,我正在尝试基于DataTrigger更改内容控件的内容,DataTrigger检查绑定是否与类型匹配,以及是否更改了contentcontrols显示的内容,但运气不佳 简而言之,如果源是某个类型,我希望更改此ContentControl的内容。我尝试使用Styles/DataTriggers来实现这一点 <ContentControl> <ContentControl.Content> <TextBlock Name="CollectionC

我正在尝试基于DataTrigger更改内容控件的内容,DataTrigger检查绑定是否与类型匹配,以及是否更改了
contentcontrols
显示的内容,但运气不佳

简而言之,如果源是某个类型,我希望更改此ContentControl的内容。我尝试使用Styles/DataTriggers来实现这一点

<ContentControl>
  <ContentControl.Content>
    <TextBlock Name="CollectionControlTextBox1" 
         Tag="." 
         PreviewMouseDown="CollectionControlDefaultDockPanel_MouseButtonDown"
         PreviewMouseUp="CollectionControlTextBox1_PreviewMouseUp"
         MouseMove="CollectionControlDefaultDockPanel_MouseMove"
         Drop="CollectionControlDefaultDockPanel_Drop"
         Foreground="{Binding Meta.ColorBrush, Mode=OneWay, TargetNullValue={StaticResource TextBrush}, FallbackValue={StaticResource TextBrush}}"
         AllowDrop="True"
         MinHeight="20" 
         Padding="5 2 0 0"
         KeyboardNavigation.IsTabStop="False"
         Focusable="True"
         TextTrimming="CharacterEllipsis"
         ContextMenu="{Binding ParentControl.MemberContextMenu, Mode=OneWay}"
         Text="{Binding DisplayName, Mode=OneWay}">
      <TextBlock.CommandBindings>
        <CommandBinding Command="{x:Static iugo:EditorCommands.Metadata}" Executed="Metadata" />
      </TextBlock.CommandBindings>
    </TextBlock>
  </ContentControl.Content>
  <ContentControl.Style>
    <Style TargetType="ContentControl">
      <Style.Triggers>
        <DataTrigger Binding="{Binding Source, Converter={StaticResource IsAssociation}}" Value="True">
          <Setter Property="Content">
            <Setter.Value>
              <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding IdEntry.Id}" ToolTip="{Binding IdEntry.Entry.Name}" FontSize="10" Foreground="{StaticResource DisabledTextBrush}" HorizontalAlignment="Center" Margin="0, 3, 0, 0"/>
                <TextBlock Text="{Binding IdEntry.Entry.Name}" ToolTip="{Binding IdEntry.Entry.Name}" FontSize="13" Margin="5, 0, 0, 0"/>
              </StackPanel>
            </Setter.Value>
          </Setter>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </ContentControl.Style>
</ContentControl>


我已经测试了转换器:
IsAssociation
被正确命中,并且是正确的值,但是内容不会更改为
DataTrigger
中定义的
stackpanel
。我通过使用Visual Studio的视觉树确认了这一点,它仍然链接到旧内容。

直接设置
内容
类似

<ContentControl>
    <Content>
        ...
    </Content>
</ContentControl>

...
大于样式触发器中Setter设置的值。因此,您的DataTrigger将被忽略

将初始值移动到另一个Setter,而不是直接设置内容:

<ContentControl>
    <ContentControl.Style>
        <Style TargetType="ContentControl">
            <Setter Property="Content">
                <Setter.Value>
                    <TextBlock ...>
                        ...
                    </TextBlock>
                </Setter.Value>
             </Setter>
             <Style.Triggers>
                 <DataTrigger ...>
                     <Setter Property="Content">
                         <Setter.Value>
                             <StackPanel Orientation="Horizontal">
                                 ...
                             </StackPanel>
                         </Setter.Value>
                     </Setter>
                 </DataTrigger>
             </Style.Triggers>
         </Style>
    </ContentControl.Style>
</ContentControl>

...
...

我想你不需要DataTrigger。您只需将转换器应用于文本属性。然后在转换器中,您可以检查值的类型,然后根据该类型更改文本属性。我建议您使用自定义控件。我想那将完全满足你的需要。