2014-09-24 78 views
0

我想拖放从1列表到另一个列表。我尝试了下面的代码。它正确拖放,但不会更改掉到另一个列表的文本的颜色。 (我希望旁边的文字颜色改变,以便知道哪些文字被丢弃(假设为蓝色))。为什么我的ListBox拖放文本颜色不变?

我MainPage.xaml中是这样的:

<UserControl x:Class="Silverlight4.DragDropListBox.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:toolKit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit" 
      xmlns:local="clr-namespace:Silverlight4.DragDropListBox"> 

    <UserControl.Resources> 
     <local:StyleFunctionConverter x:Key="StyleFunctionConverter"/> 
    </UserControl.Resources> 

    <Grid x:Name="LayoutRoot" Background="White" HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <TextBlock Text="Drag &amp; Drop ListBox Demo" FontSize="20" FontWeight="Bold" Foreground="Red" Margin="10" Grid.Row="0"/> 
     <StackPanel Orientation="Horizontal" Margin="10" Grid.Row="1"> 
      <toolKit:ListBoxDragDropTarget AllowDrop="True"> 
       <ListBox x:Name="customerListBoxMain" Height="200" Width="200" 
          DisplayMemberPath="Name" Style="{Binding IsInGroup, Converter={StaticResource StyleFunctionConverter}}"> 
        <ListBox.ItemsPanel> 
         <ItemsPanelTemplate> 
          <StackPanel Orientation="Vertical"/> 
         </ItemsPanelTemplate> 
        </ListBox.ItemsPanel> 
       </ListBox> 
      </toolKit:ListBoxDragDropTarget> 
      <TextBlock Width="20" /> 
      <toolKit:ListBoxDragDropTarget AllowDrop="True"> 
       <ListBox Height="200" Width="200" DisplayMemberPath="Name" Style="{Binding IsInGroup, Converter={StaticResource StyleFunctionConverter}}"> 
        <ListBox.ItemsPanel> 
         <ItemsPanelTemplate> 
          <StackPanel Orientation="Vertical"/> 
         </ItemsPanelTemplate> 
        </ListBox.ItemsPanel> 
       </ListBox> 
      </toolKit:ListBoxDragDropTarget> 
     </StackPanel> 
    </Grid> 
</UserControl> 

而且MainPage.xaml.cs中类:

public partial class MainPage : UserControl 
    { 
     public MainPage() 
     { 
      InitializeComponent(); 

      customerListBoxMain.ItemsSource = PersonDataProvider.GetData(); 
     } 
    } 

和类PersonDataProvider.cs是:

public class PersonDataProvider 
    { 
     public static ObservableCollection<Person> GetData() 
     { 
      return new ObservableCollection<Person> 
         { 
          new Person { Name = "Akash Sharma" }, 
          new Person { Name = "Vinay Sen" }, 
          new Person { Name = "Lalit Narayan" }, 
          new Person { Name = "Madhumita Chatterjee" }, 
          new Person { Name = "Priyanka Patil" }, 
          new Person { Name = "Kumar Sanu" }, 
          new Person { Name = "Victor Kapoor" }, 
          new Person { Name = "Shymal Sen" }, 
          new Person { Name = "Alan D'Souza" }, 
          new Person { Name = "Kamal Saha" }, 
          new Person { Name = "Alex Chan" }, 
          new Person { Name = "Rohit Sharma" }, 
          new Person { Name = "Dipti Sen" }, 
          new Person { Name = "Dinesh Sharma" }, 
          new Person { Name = "Kamal Kapoor" }, 
          new Person { Name = "Raj Kapoor" }, 
          new Person { Name = "Deepa Karmakar" }, 
          new Person { Name = "Sarmishtha Chakrobarty" }, 
          new Person { Name = "Pranab Kumar Debnath" }, 
          new Person { Name = "Hiral Grover" }, 
          new Person { Name = "Munmun Patel" }, 
          new Person { Name = "Santosh Kumar Sen" }, 
          new Person { Name = "Sandeep Debnath" } 
         }; 
     } 
    } 

而且Person.cs(型号是)

public class Person 
    { 
     public string Name { get; set; } 
    } 

而且Styles.xaml(资源字典)

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Style x:Key="ListBoxTextNormalItem" TargetType="TextBlock"> 
     <Setter Property="Foreground"> 
      <Setter.Value> 
       <SolidColorBrush Color='Blue' /> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ResourceDictionary> 

而且App.xaml中是:

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      x:Class="Silverlight4.DragDropListBox.App"> 

    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Styles.xaml"></ResourceDictionary> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 


And StyleFunctionConverter.cs is: 


    public class StyleFunctionConverter : IValueConverter 
     { 
      public Object Convert(Object value, Type targetType, Object parameter, CultureInfo culture) 
      { 
       if (value == null) 
        return null; 

       bool isInGroup = (bool)value; 
       if (isInGroup) 
        return Application.Current.Resources["ListBoxTextNormalItem"]; 
       else 
        return Application.Current.Resources["ListBoxTextChangeItem"]; 
      } 

      public Object ConvertBack(Object value, Type targetType, Object parameter, CultureInfo culture) 
      { 
       return null; 
      } 
     } 

我如何丢弃文字,<SolidColorBrush Color='Blue' />颜色?

+0

你的风格目标...'<形式X:键= “ListBoxTextNormalItem” 的TargetType = “TextBlock的”>'...,然后在你的代码中尝试设置ListBox风格。也许这是原因? – 2014-09-24 10:38:36

+0

我完成了更改,但仍然无法正常工作。你认为这是问题吗?SolidColorBrush Color ='Blue'¨。我将SolidColorBrush改为蓝色,因为我无法在那里获得“背景”和“FontColor”属性。 – user3085082 2014-09-24 11:23:24

回答

1

我宁愿在XAML中使用DataTriggers,而不是绑定你的风格。这样,您可以根据您可以使用绑定访问的数据更改样式。

事情是这样的:

<ListBox> 
     <ListBox.Resources> 
      <Style TargetType="ListBoxItem"> 
       <Setter Property="Foreground" Value="Green" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Path=DataContext.IsInGroup}" Value="True"> 
         <Setter Property="Foreground" Value="Blue"></Setter> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </ListBox.Resources> 
    </ListBox> 
+0

oK让我试试看是否有效。 – user3085082 2014-09-24 11:20:04

相关问题