0

我使用以下资源在 GroupItem 中使用的 StackPanel 中设置了图像的图像路径(效果很好):

<Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type GroupItem}">
                <Expander Name="expander" IsExpanded="True" >
                    <Expander.Header>
                        <StackPanel Orientation="Horizontal">
                            <Image Source="pack://application:,,,/Resources/History.ico" Margin="2,0"  
                                   Width="18" Height="18" ></Image>
                            <TextBlock Text="{Binding Name}" Padding="2,0"/>
                        </StackPanel>
                    </Expander.Header>
                    <ItemsPresenter />
                </Expander>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

在此 DataGrid 中使用:

    <DataGrid Name="JobHistory" CanUserAddRows="False" AutoGenerateColumns="False" ColumnWidth="*"
              CanUserDeleteRows="False" ItemsSource="{Binding}" Grid.Row="2" 
              Grid.ColumnSpan="5" CanUserResizeRows="False" 
              Grid.RowSpan="2" IsTextSearchEnabled="True" VerticalScrollBarVisibility="Visible"  >
        <DataGrid.GroupStyle>
            <GroupStyle ContainerStyle="{StaticResource GroupHeaderStyle}">
                <GroupStyle.Panel>
                    <ItemsPanelTemplate>
                        <DataGridRowsPresenter/>
                    </ItemsPanelTemplate>
                </GroupStyle.Panel>
            </GroupStyle>
        </DataGrid.GroupStyle>
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Status" Width="Auto" IsReadOnly="True">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Image Source="{Binding ResultImagePath}" Height="18" Width="18"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTextColumn Header="Job description" Binding="{Binding JobDescription}"/>
        </DataGrid.Columns>
    </DataGrid>

DataView 通过以下代码进行分组:

    ListCollectionView collection = new ListCollectionView(JobData);
    collection.GroupDescriptions.Add(new PropertyGroupDescription("Name"));
    JobHistory.ItemsSource = collection;

我的问题:如何在 StackPanel 中动态设置图像源?

<StackPanel Orientation="Horizontal">
  <Image Source="pack://application:,,,/Resources/History.ico" Margin="2,0"  
     Width="18" Height="18" ></Image>
  <TextBlock Text="{Binding Name}" Padding="2,0"/>
</StackPanel>

编辑1:使用:

<UserControl.Resources>
            <Image x:Key="image" Source="pack://application:,,,/Resources/History.ico" Height="18" Width="18" Margin="2,0"/>
</UserControl.Resources>


<StackPanel Orientation="Horizontal">
    <ContentControl Content="{StaticResource ResourceKey=image}"/>
      Width="18" Height="18" ></Image>
    <TextBlock Text="{Binding Name}" Padding="2,0"/>
</StackPanel>

作为 user2760623 建议的作品。

然而,我的问题仍然存在。在任何给定时间,我都有多行按“名称”分组。也可以有几个不同的组。根据作业当前状态,我想更改 GroupItem 标题中的图像。那么我如何确定哪个标头是“正确的”标头,以及如何准确地操纵那个单个标头?

4

1 回答 1

1

把图片源作为动态资源,然后就可以改了。只需执行以下操作:

  1. 定义命名空间 - xmlns:clr="clr-namespace:System;assembly=mscorlib".
  2. 添加为资源 - <clr:String x:Key="imageSource" >the path...</clr:String>.
  3. 和图像本身 - <Image Source="{DynamicResource ResourceKey=imageSource}"
  4. 当你想改变它时 - this.Resources["imageSource"] = "another path..."

您也可以执行相同的概念,只需将整个图像作为资源(而不仅仅是图像路径),而不需要添加命名空间(上面的数字 1)。并将其作为 ContentControl 的内容 - <ContentControl Content="{StaticResource ResourceKey=image}"/>

于 2013-10-06T06:10:58.933 回答