addresses
の場合はListBox
です。各項目は、DataTemplate
を使用して書式設定された住所ラベルです。リストボックス内の1つのリストアイテムの背景を変更します(選択したアイテムではありません)
ユーザーがリスト内のアイテムを選択してSet to default
ボタンをクリックすると、そのアイテムの背景色をデフォルトに変更したいと思います。
SelectedItem
ではなく、その1つのアイテムのみを変更したいのです... SelectedItem
は1色で、DEFAULTは異なる色になる可能性があります。
私は非デフォルトにリセットし、デフォルトを設定するループを必要とする場合でも...実用的にこれをやりたい...
私の問題はListBox.SelectedItem
は私だけ根底へのアクセスを可能にするということですコレクションのオブジェクト(この場合はAddress
)。
ので、以下では動作しません。
foreach (ListBoxItem item in lstShipToAddresses.Items)
{
// does not work (can't cast Address to ListboxItem)
item.Background = Brushes.Magenta;
}
はどのようにして、特定のListBoxItem
の背景にアクセスすることができますか?
は、私は単にデフォルトaddress
を表示するListBox
外の別の領域を使用することを含む計画B
を持っているが、それはもう少し画面スペースを飲み込んでしまうので、私はそれを避けるためにしようとしています。
アップデート(XAML):
<ListBox Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
Name="lstShipToAddresses"
ItemsSource="{Binding Path=ocShipToAddress}"
SelectionChanged="lstShipToAddresses_SelectionChanged"
SelectedValuePath="Address_ID">
<ListBox.ItemTemplate>
<DataTemplate>
<Border BorderBrush="#FF000000" BorderThickness="2,2,2,2" CornerRadius="10" HorizontalAlignment="Stretch" >
<Grid HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackPanel>
<TextBlock Grid.Row="0" Text="{Binding Path=Address_Label}" HorizontalAlignment="Stretch"></TextBlock>
</StackPanel>
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
最終解決:
このコードは、ボタンクリック内で行われるので、SelectedItem
は、我々はデフォルトにしたいものです。
for (int i = 0; i < lstShipToAddresses.Items.Count; i++)
{
if (lstShipToAddresses.Items[i] == lstShipToAddresses.SelectedItem)
{
// Set background on default
var listBoxItem = lstShipToAddresses.ItemContainerGenerator.ContainerFromIndex(i);
(listBoxItem as ListBoxItem).Background = Brushes.Magenta;
}
else
{
// Reset background on non-default
var listBoxItem = lstShipToAddresses.ItemContainerGenerator.ContainerFromIndex(i);
(listBoxItem as ListBoxItem).Background = Brushes.White;
}
}
- 少ない怖い色にマゼンタを変更する必要があるかもしれません。)
あなたはItemContainerStyleを使用することができます。 – Amine
色を変更するかどうかを確認するために次のようにした場合@ 012Stack 'item.Background = new SolidColorBrush(Colors.Red);'次に、 'Magenta'色を使用する場合 – MethodMan
項目は「Address "ので、" Background "というプロパティはありません – pStan