0

我想在任何其他控件中显示列表框选定项(图像),但尺寸更大

我尝试了两个列表框,也尝试了设置IsSynchronizedWithCurrentItem="True",但它不起作用,请在下面找到代码。

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" WindowStartupLocation="CenterScreen" 
    WindowState="Maximized">

    <Window.Resources>
        <XmlDataProvider x:Key="myXmlDataBase" XPath="/myXmlData">
            <x:XData>
                <myXmlData xmlns="">
                    <Item Name = "CoverSheet" SNo="1"  Type="GrpBX" Image="C:\Work\00288511851128436163\N12201_0003_003\00000003.tif"/>
                    <Item Name = "HCFA" SNo="2" Type="GrpBX" Image="C:\Work\00288511851128436163\N12201_0003_003\00000004.tif"/>
                    <Item Name = "HCFA" SNo="3" Type="GrpBX" Image="C:\Work\00288511851128436163\N12201_0003_003\00000004.tif"/>
                    <Item Name = "HCFA" SNo="4" Type="GrpBX" Image="C:\Work\00288511851128436163\N12201_0003_003\00000004.tif"/>
                    <Item Name = "HCFA" SNo="5" Type="GrpBX" Image="C:\Work\00288511851128436163\N12201_0003_003\00000004.tif"/>
                    <Item Name = "HCFA" SNo="6" Type="GrpBX" Image="C:\Work\00288511851128436163\N12201_0003_003\00000004.tif"/>
                    <Item Name = "HCFA_CC" SNo="7" Type="GrpBX" Image="C:\Work\00288511851128436163\N12201_0003_003\00000005.tif"/>
                    <Item Name = "FrontPage" SNo="8" Type="GrpBX" Image="C:\Work\00288511851128436163\N12201_0003_003\N12201_0003_003I00.tif"/>
                </myXmlData>
            </x:XData>
        </XmlDataProvider>
    </Window.Resources>


    <DockPanel LastChildFill="True"   DataContext="{Binding Source={StaticResource myXmlDataBase}}">


            <!--ItemsSource="{Binding Source={StaticResource myXmlDataBase},XPath=Item}"-->
            <ListBox Name="lv"  FontSize="12" Background="LightSteelBlue" ItemsSource="{Binding Source={StaticResource myXmlDataBase},XPath=Item}"      
            ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectionMode="Single"    
            DataContext="{Binding}" IsSynchronizedWithCurrentItem="True" DockPanel.Dock="Top" SelectedIndex="0" >

                <ListBox.ItemContainerStyle>
                    <Style TargetType="ListBoxItem">
                        <Style.Resources>
                            <!-- Background of selected item when focussed -->
                            <LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" StartPoint="0.5,0" EndPoint="0.5,1">
                                <GradientStop Color="#FFD9F4FF" Offset="0"/>
                                <GradientStop Color="#FF9BDDFB" Offset="1"/>

                            </LinearGradientBrush>
                            <!-- Background of selected item when not focussed -->
                            <LinearGradientBrush x:Key="{x:Static SystemColors.ControlBrushKey}" StartPoint="0.5,0" EndPoint="0.5,1">
                                <GradientStop Color="#FFEEEDED" Offset="0"/>
                                <GradientStop Color="#FFDDDDDD" Offset="1"/>
                            </LinearGradientBrush>
                        </Style.Resources>
                    </Style>
                </ListBox.ItemContainerStyle>
                <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <VirtualizingStackPanel  Orientation="Horizontal" HorizontalAlignment="Stretch" Background="White" Width="Auto" Height="Auto" />
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>
                <ListBox.ItemTemplate>
                    <!--Source="{Binding XPath=@Image}"-->
                    <DataTemplate>
                        <Viewbox Stretch="None"  HorizontalAlignment="Stretch" >
                            <Border BorderThickness="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" DataContext="{Binding}" BorderBrush="IndianRed"   Margin="0" Height="Auto">
                                <DockPanel>
                                    <Image 
                                    DockPanel.Dock="Top" Width="150" Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="Auto"  
                                    x:Name="Myimage" RenderOptions.BitmapScalingMode="HighQuality"  Source="{Binding XPath=@Image}">
                                    </Image>
                                    <Grid>
                                        <TextBlock Text="{Binding XPath=@SNo}" HorizontalAlignment="Center" FontWeight="Normal"   FontSize="13"  />
                                    </Grid>
                                </DockPanel>
                            </Border>
                        </Viewbox>
                    </DataTemplate>

                </ListBox.ItemTemplate>
            </ListBox>

        <ListBox Name="lv1"  FontSize="12" Background="LightSteelBlue" DataContext="{Binding ElementName=lv, Path=SelectedItems}" ItemsSource="{Binding}"     
            ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectionMode="Single" KeyUp="lv1_keyup"  >

            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <DockPanel   LastChildFill="True" HorizontalAlignment="Stretch" Background="LightSteelBlue"  Width="Auto" Height="Auto" />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>

            <ListBox.ItemTemplate>
                               <DataTemplate>
                    <Viewbox Stretch="None"  HorizontalAlignment="Stretch"  >
                               <Image 
                                    Width="150" Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="Auto"  
                                    x:Name="Myimage" RenderOptions.BitmapScalingMode="HighQuality" Source="{Binding}" >
                                </Image>
                    </Viewbox>
                </DataTemplate>

            </ListBox.ItemTemplate>
        </ListBox>


    </DockPanel>
</Window>

我尝试过使用 ** XmlDataProvider**,但在实际场景中,我将通过收集来获取图像。即使从集合中获取图像,我也应该处理相同的解决方案

4

2 回答 2

1

您需要将 ListBox SelectedItem 绑定到您希望以更大尺寸显示 SelectedItem 的容器的内容。

这是您尝试做的一个小例子。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="200"></ColumnDefinition>
        <ColumnDefinition Width="*"></ColumnDefinition>
    </Grid.ColumnDefinitions>

    <!-- Image ListBox -->
    <ListBox Name="imageListBox" Grid.Column="0"                    
             ItemsSource="{Binding Source={StaticResource myXmlDataBase}, XPath=Item}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <DockPanel>
                    <Image Width="150" Margin="5" x:Name="Myimage" Source="{Binding XPath=@Image}"></Image>
                    <TextBlock Text="{Binding XPath=@SNo}" HorizontalAlignment="Center" FontWeight="Normal" FontSize="13" />
                </DockPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

    <!-- Selected Image -->
    <ContentPresenter Grid.Column="1"
                      Content="{Binding ElementName=imageListBox, Path=SelectedItem}">
        <ContentPresenter.ContentTemplate>
            <DataTemplate>
                <Image Source="{Binding XPath=@Image}"></Image>
            </DataTemplate>
        </ContentPresenter.ContentTemplate>
    </ContentPresenter>

</Grid>
于 2013-07-27T13:15:03.143 回答
0

In your code add a selection changed event handler for the listbox:

      lv.SelectionChanged += lv_SelectionChanged;


private void lv_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
                  //Get selected item and do what you want with it here.
    }

EDITS, want do in XAML only can use a CollectionViewSource

<Window.Resources>
<CollectionViewSource x:Key="myViewSource" d:DesignSource="{d:DesignInstance {x:Type YOUR_DATA_TYPE}, CreateList=True}"/>
        <CollectionViewSource x:Key="myPath_ViewSource" Source="{Binding Image, Source={StaticResource myViewSource}}"/>
</Window.Resources>

THen

<Grid DataContext="{StaticResource myViewSource}">
 //SOME LIST BOUND TO MAIN CONTEXT
</Grid>

 // LIST BOUND TO SELECTED PATH
<ListView 
        ItemsSource= "{Binding Source={StaticResource myPath_ViewSource} }" ...

Of course you will need to get myViewSource in code behind and populate with data

Done pretty quickly off top of my head you will need to rework and refine it for yourself,

于 2013-07-27T12:12:37.827 回答