0

我是一个 ListBox,其中包含来自 IsolatedStorage 的图像,用户可以在其中选择要使用的图像。我想通过图像周围的边框(或其他更好的方式)以某种方式向用户显示他们当前在列表框中选择或按下了哪个图像。我不确定如何获取当前选择的图像并在该图像周围放置边框。我目前正在使用 ListBox 的 SelectionChanged 事件来尝试此功能。到目前为止,我所拥有的如下:

主页.xaml

 <ListBox x:Name="Recent" ItemsSource="{Binding Pictures}" Margin="8" 
                     SelectionChanged="recent_SelectionChanged" toolkit:TiltEffect.IsTiltEnabled="True">
                <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <toolkit:WrapPanel Orientation="Horizontal" />
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Image x:Name="recentImage" Source="{Binding Source}" Margin="12" Width="115"/>
                    </DataTemplate>
                </ListBox.ItemTemplate>
</ListBox>

MainPage.xaml.cs

 private void recent_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        //Place border round currently selected image
        //?

    }

有什么想法吗?

4

2 回答 2

1

更新到修复

主页.xaml

//within the ListBox DataTemplate
 <Border>
     <Image x:Name="recentImage" Source="{Binding Source}" Margin="12" Width="115"/>
 </Border>

MainPage.xaml.cs

//within recent_SelectionChanged
var lb = sender as ListBox;
var lbi = lb.ItemContainerGenerator.ContainerFromItem(lb.SelectedItem) as ListBoxItem;

lbi.BorderThickness = new Thickness(2, 2, 2, 2);
lbi.BorderBrush = new SolidColorBrush((Color)Application.Current.Resources["PhoneAccentColor"]);    
于 2013-06-07T05:31:06.300 回答
0

我会在您的数据模板中的图像之上创建另一个图像。该图像大部分是透明的,只有边框和一点点勾(就像 Windows 8 应用程序一样)。然后我会在选择项目时切换此图像的可见性。

因为图像大部分是透明的,所以它会显示为所选图像周围的边框。

我使用这种技术将项目“变灰”(通过使用不透明度约为 10% 的纯黑色图像)并且效果非常好。

您应该能够简单地将可见性绑定到所选属性 - 尽管您需要一个转换器来在布尔值和可见性之间进行转换。

  <DataTemplate>
       <Image x:Name="recentImage" Source="{Binding Source}" Margin="12" Width="115"/>
       <Image x:Name="borderImage" Source="Images/borderimg.png" Margin="12" Width="115" Visibility="Collapsed"/>
  </DataTemplate>

然后:

 private void recent_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        //set the visibility property of the selected item to 'Visible'

    }
于 2013-06-07T05:26:04.840 回答