0

バックグラウンドを変更するコードで操作するには、xaml で特定のコントロールを見つける必要があります。

私の問題は、特定のコントロールが見つからないことです。

.FindByName(Textblock) と visualtreehelper を試しました。また、コード txtVeranderkleur に入力しようとしましたが、システムはコントロールを認識していません。私にとってはうまくいきませんでした。

「txtVeranderkleur」を見つける必要があります。だから私はコードで色を変えることができます。

<Grid x:Name="LayoutRoot" Background="White">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="80"/>
        </Grid.RowDefinitions>
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="0,0,0,28" Orientation="Horizontal">
            <Border Background="#EE2E24" CornerRadius="15,15,15,15" Width="450" Margin="15,15,15,15">
                <TextBlock x:Name="Events" TextWrapping="Wrap" Text="Evenementen" Style="{StaticResource subtitle}" Margin="15,15,15,15"/>
            </Border>
        </StackPanel>
        <ListBox Grid.Row="1"  Margin="12,-15,0,12" x:Name="lbDagprogrammaInfo" SelectionChanged="lbDagprogrammaInfo_SelectionChanged" >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                    <StackPanel Orientation="Horizontal" Margin="15,0,0,17">
                        <Border Width="70" Height="70" BorderBrush="#EE2E24" Background="#EE2E24" BorderThickness="3" CornerRadius="3,3,3,3" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="0,5,0,0">
                            <TextBlock Width="70" Height="70" Text="{Binding LineTeller}" Style="{StaticResource contentRect}"></TextBlock>
                        </Border>
                        <StackPanel Orientation="Horizontal" Margin="8,0,0,0">
                            **<TextBlock x:Name="txtVeranderkleur" Style="{StaticResource contentText}">
                                <Run Text="{Binding LineUur}"></Run>
                                <Run Text="{Binding LineNaam}"></Run>
                            </TextBlock>**

                        </StackPanel>
                    </StackPanel>
                </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        <StackPanel Width="480" Height="80" Background="Black" Grid.Row="2">
            <Image x:Name="imgSponsor"  Source="{Binding LineSponsorFoto}"  Height="80" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="3"  />
        </StackPanel>
    </Grid>
4

1 に答える 1

2

FindName は、DataTemplate 内の要素に対しては機能しません。

必要に応じて、lbDagprogrammaInfo.ItemContainerGenerator.ContainerFromIndex を使用して、変更する txtVeranderkleur を含む ListBoxItem を取得し、VisualTreeHelper.GetChild を使用してビジュアル ツリーで TextBlock を検索できます。

各項目の DataContext のデータに基づいて色を論理的に決定できる場合は、Background を適切な Property にバインドし、IValueConverter を使用して色を選択できます。

選択などの ListBox 機能に基づいて色を変更するだけの場合は、Visual States を使用して色を変更することも検討する必要があります。

編集:

VisualTreeHelper パスがどのように見えるかのスニペットを次に示しますが、より一般的なアプローチを見つける必要があります。

ListBoxItem l = lbDagprogrammaInfo.ItemContainerGenerator.ContainerFromIndex(0) as ListBoxItem;
Border b = VisualTreeHelper.GetChild(l, 0) as Border;
ContentControl c = VisualTreeHelper.GetChild(b, 0) as ContentControl;
ContentPresenter p = VisualTreeHelper.GetChild(c, 0) as ContentPresenter;
StackPanel s = VisualTreeHelper.GetChild(p, 0) as StackPanel;
TextBlock t = s.FindName("txtVeranderkleur") as TextBlock;
于 2013-05-07T14:09:29.390 に答える