1

我想使用 DataTemplate 来更改一些 TabItems 的 Header。到目前为止,我有这个代码,它工作正常:

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"  x:Class="SFgame.MainWindow"
        Title="SoccerFusion" Height="600" Width="1000" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
    <Grid>
        <TabControl TabStripPlacement="Bottom">
            <TabControl.Resources>
                <Style TargetType="{x:Type TabPanel}">
                    <Setter Property="HorizontalAlignment" Value="Center" />
                </Style>
                <DataTemplate x:Key="mmHeaderTemplate">
                    <Image Name="mmItem1" />
                    <DataTemplate.Triggers>
                        <DataTrigger Binding="{Binding Path=IsSelected,RelativeSource={RelativeSource TemplatedParent}}" Value="True">
                            <Setter TargetName="mmItem1" Property="Source" Value="data\Images\Menu\ActiveItem.png" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Path=IsSelected,RelativeSource={RelativeSource TemplatedParent}}" Value="False">
                            <Setter TargetName="mmItem1" Property="Source" Value="data\Images\Menu\InactiveItem.png" />
                        </DataTrigger>
                    </DataTemplate.Triggers>
                </DataTemplate>
            </TabControl.Resources>
            <TabItem Height="32" Width="32" HeaderTemplate="{StaticResource mmHeaderTemplate}" IsSelected="True">
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
            <TabItem Height="32" Width="32" HeaderTemplate="{StaticResource mmHeaderTemplate}" >
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
            <TabItem Height="32" Width="32" HeaderTemplate="{StaticResource mmHeaderTemplate}" >
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
            <TabItem Height="32" Width="32" HeaderTemplate="{StaticResource mmHeaderTemplate}" >
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
        </TabControl>
    </Grid>
</Window>

唯一的问题是,现在所有 TabItem-Headers 都有相同的图片。所有 TabItems 都应该有不同的图片 fpr 活动和非活动对。

所以我想我会将图片的路径作为参数传递,但我就是不知道它是如何工作的。

我唯一能找到的是:“无法传递参数”。

如果真的不行的话。有替代方案吗?例如,给 TabItem 一个名称,如“TabItem1”,并使用路径“data\Images\Menu\Tabitem1_active.png”和“data\Images\Menu\Tabitem1_inactive.png”作为源?我可以将绑定源的名称插入字符串吗?

编辑:我更接近解决方案

<Setter TargetName="mmItem1" Property="Source">
    <Setter.Value>
        <MultiBinding StringFormat="{}{0}{1}{2}">
            <Binding Mode="OneTime" Source="data\Images\Menu\" />
            <Binding Mode="OneTime" Source="??????" />
            <Binding Mode="OneTime" Source="inactive.png" />
        </MultiBinding>
    </Setter.Value>
</Setter>

使用此代码而不是上面的代码,我可以连接三个字符串。我现在唯一需要的是源控制/绑定源的名称

下一个编辑:我想我更接近一点。通过使用 TabItem 的 Header,我成功地将一个字符串从我的 tabitem 获取到模板。

代码现在看起来像这样:

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="SoccerFusion" Height="400" Width="400">
  <Grid>
    <TabControl TabStripPlacement="Bottom">
        <TabControl.Resources>
            <Style TargetType="{x:Type TabPanel}">
                <Setter Property="HorizontalAlignment" Value="Center" />
            </Style>
            <DataTemplate x:Key="mmHeaderTemplate">
              <Grid>
                <Image Name="mmImg" />
                <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content, StringFormat='{}{0}'}" />
              </Grid>
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding Path=IsSelected,RelativeSource={RelativeSource TemplatedParent}}" Value="True">
                    ????? HERE COMES THE PROBLEM ??????
                        <Setter TargetName="mmImg" Property="Source" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content, StringFormat='{}{0}active.png'}" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Path=IsSelected,RelativeSource={RelativeSource TemplatedParent}}" Value="False">
                    ????? HERE COMES THE PROBLEM ??????
                        <Setter TargetName="mmImg" Property="Source" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content, StringFormat='{}{0}inactive.png'}" />
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </TabControl.Resources> 
        <TabItem Height="32" HeaderTemplate="{StaticResource mmHeaderTemplate}" IsSelected="True" Header="mmItem1">
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
        <TabItem Height="32" HeaderTemplate="{StaticResource mmHeaderTemplate}" Header="mmItem2" >
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
        <TabItem Height="32" HeaderTemplate="{StaticResource mmHeaderTemplate}" Header="mmItem3" >
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
        <TabItem Height="32" HeaderTemplate="{StaticResource mmHeaderTemplate}" Header="mmItem4" >
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
    </TabControl>
  </Grid>
</Page>

问题是:我生成一个字符串并将其作为源提供给图像。哪个工作正常。但是 Source 需要一个 URI 并且不能对 String 做任何事情

有任何想法吗?

4

0 回答 0