将BindingSource的名称插入到字符串中?

时间:2012-11-27 11:45:30

标签: xaml binding datatemplate datatrigger tabitem

我想使用DataTemplate来更改某些TabItem的标头。 到目前为止,我有这个代码,工作正常:

<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活动和非活动。

所以我想我会将图片的路径作为参数传递,但我无法弄清楚它是如何工作的。

我唯一能找到的是:&#34;无法通过参数&#34;。

如果那真的不起作用。还有其他选择吗?例如,给TabItem一个名称,如&#34; TabItem1&#34;并使用Path&#34; data \ Images \ Menu \ Tabitem1_active.png&#34;和&#34; data \ Images \ Menu \ Tabitem1_inactive.png&#34;作为来源?我可以将Binding-Source的名称插入字符串吗?

编辑: 我更接近解决方案

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

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

下一步编辑: 我想,我离我更近一点了。通过使用TabItem的标题,我成功地从我的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>

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

任何想法?

0 个答案:

没有答案