Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在项目选择中,更改Windows Phone中ListBoxItem的一部分矩形的颜色_C#_Windows Phone 7_Windows Phone - Fatal编程技术网

C# 在项目选择中,更改Windows Phone中ListBoxItem的一部分矩形的颜色

C# 在项目选择中,更改Windows Phone中ListBoxItem的一部分矩形的颜色,c#,windows-phone-7,windows-phone,C#,Windows Phone 7,Windows Phone,我有一个包含以下XAML的列表框: <ListBox.ItemTemplate> <DataTemplate> <Grid Name="listItemGrid"> <Grid.ColumnDefinitions> <ColumnDefinition MaxWidth="20" MinWidth="20" Width="20" /> <ColumnDefinition /&g

我有一个包含以下XAML的列表框:

<ListBox.ItemTemplate>
  <DataTemplate>
    <Grid Name="listItemGrid">
      <Grid.ColumnDefinitions>
        <ColumnDefinition MaxWidth="20" MinWidth="20" Width="20" />
        <ColumnDefinition />
      </Grid.ColumnDefinitions>
      <Rectangle Name="listItemSideBar" Height="85" HorizontalAlignment="Left"
         Margin="0, 0, 0, 0" Stroke="{StaticResource PhoneAccentBrush}" 
         StrokeThickness="1" VerticalAlignment="Top" Fill="{StaticResource
         PhoneAccentBrush}" MinHeight="85" Width="25"/>
      <StackPanel Margin="0,0,0,17" Grid.Column="1" Grid.ColumnSpan="2">
        <TextBlock Name="listItemMainData" Text="{Binding LineTwo}" 
          TextWrapping="NoWrap" Margin="12,0,0,0" Style="{StaticResource 
          PhoneTextExtraLargeStyle}"/>
        <TextBlock Name="listItemSubData" Text="{Binding LineOne}" 
          TextWrapping="NoWrap" Margin="12,-6,0,0" 
          Style="{StaticResource PhoneTextSubtleStyle}"/>
      </StackPanel>
    </Grid>
  </DataTemplate>
</ListBox.ItemTemplate>

当选择ListBoxItem时,我想将该ListBoxItem的矩形填充颜色更改为其他颜色;取消选择ListBoxItem时,我希望填充颜色改回PhoneAccentBrush


有办法完成这项任务吗?

我终于想出了一个解决方案,我在下面复制了这个解决方案。
ColorHelper
类只是从PhoneAccentBrush资源获取PhoneAccentColor。DarkPhoneAcentColor是通过找到的方法生成的
PropertyValue(child,“Name”)
是一种语法扩展方法,用于从类型的属性中获取值;如果属性不存在,则返回
default(T)

尚未对此代码应用完全错误检查

private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    Color accent = ColorHelper.PhoneAccentColor;
    Color accentDark = ColorHelper.DarkPhoneAccentColor;
    foreach (object item in e.RemovedItems)
        SetListBoxItemColor(item, accentDark);
    foreach (object item in e.AddedItems)
        SetListBoxItemColor(item, accent);
}

private void SetListBoxItemColor(object item, Color color)
{
    ListBoxItem listBoxItem = listBox.ItemContainerGenerator
        .ContainerFromItem(item) as ListBoxItem;
    if (listBoxItem != null)
    {
        Rectangle rectangle = GetItemsRecursive<Rectangle>(
            listBoxItem, "listItemSideBar");
        SolidColorBrush fillBrush = new SolidColorBrush();
        fillBrush.Color = color;
        rectangle.Fill = fillBrush;
    }
}

private T GetItemsRecursive<T>(DependencyObject lb, string name)
    where T : DependencyObject
{
    int childrenCount = VisualTreeHelper.GetChildrenCount(lb);

    for (int i = 0; i < childrenCount; i++)
    {
        DependencyObject child = VisualTreeHelper.GetChild(lb, i);
        if (child is T)
        {
            string childName = child.GetType().PropertyValue<string>(child, "Name");
            if (String.Compare(childName, name) == 0)
                return (T)child;
        }
        return GetItemsRecursive<T>(child, name);
    }
    return default(T);
}
private void listBox\u SelectionChanged(对象发送者,selectionchangedventargs e)
{
颜色重音=ColorHelper.PhoneAccentColor;
Color accentDark=ColorHelper.DARKPHONEACENTCOLOR;
foreach(e.RemovedItems中的对象项)
SetListBoxItemColor(项目,深色调);
foreach(e.AddedItems中的对象项)
SetListBoxItemColor(项目、重音);
}
私有void SetListBoxItemColor(对象项,颜色)
{
ListBoxItem ListBoxItem=listBox.ItemContainerGenerator
.ContainerFromItem(item)作为ListBoxItem;
如果(listBoxItem!=null)
{
矩形矩形=GetItemsRecursive(
listBoxItem,“listItemSideBar”);
SolidColorBrush fillBrush=新的SolidColorBrush();
fillBrush.Color=颜色;
矩形。填充=填充笔刷;
}
}
私有T GetItemsRecursive(DependencyObject lb,字符串名称)
其中T:DependencyObject
{
int childrenCount=visualtreeheloper.GetChildrenCount(lb);
for(int i=0;i