2010-12-28 2 views
1

Pour afficher une zone de liste WPF, j'utilise un contrôle utilisateur (MessageRowTemplate) comme élément de zone de liste. L'utilisateur contrôle utilise un convertisseur de valeur (MessageTypeToBrushConverter). Pour quelque raison que ce soit, le convertisseur de valeur est uniquement trigé si le contrôle utilisateur n'est pas utilisé comme élément de la liste de sélection mais séparément.Le convertisseur de valeur n'est pas déclenché dans le contrôle utilisateur s'il est utilisé comme élément de zone de liste

XAML fichier avec contrôle de l'utilisateur séparement et à l'intérieur d'une zone de liste liste élément de la boîte:

<local:MuuriWindow x:Class="Muuri_UI_WPFv3.Window_Conversation" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="clr-namespace:Muuri_UI_WPFv3" 
Loaded="EventHandler_WindowLoaded"> 
<Window.Resources> 
    <DataTemplate x:Key="ResponsesListTemplate"> 
     <local:MessageRowTemplate Margin="3" /> 
    </DataTemplate> 
    <local:MessageTypeToBrushConverter x:Key="converter" /> 
</Window.Resources> 
<StackPanel Orientation="Vertical"> 
    <local:MessageRowTemplate x:Name="questionControl" /> 
    <ListBox HorizontalAlignment="Stretch" ItemTemplate="{DynamicResource ResponsesListTemplate}" ItemsSource="{Binding}" Name="listBoxResponses" Height="200" ScrollViewer.VerticalScrollBarVisibility="Visible" Style="{StaticResource MuuriListboxStyle}" /> 
    <StackPanel Orientation="Horizontal"> 
     <Button Name="buttonReply" Click="EventHandler_ButtonReplyClicked">Reply</Button> 
     <Button Name="buttonCancel" Click="EventHandler_ButtonCancelClicked">Cancel</Button> 
    </StackPanel> 
</StackPanel> 
</local:MuuriWindow> 

Et voici le MessageRowTemplate.xaml:

<UserControl x:Class="Muuri_UI_WPFv3.MessageRowTemplate" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="clr-namespace:Muuri_UI_WPFv3" 
Width="300" 
Loaded="UserControl_Loaded"> 
<UserControl.Resources> 
    <local:MessageTypeToBrushConverter x:Key="converter" /> 
</UserControl.Resources> 
<Grid Margin="2,1,2,1" VerticalAlignment="Top" Height="auto"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="2" /> 
     <RowDefinition Height="0.5*" /> 
     <RowDefinition Height="0.5*" /> 
     <RowDefinition Height="2" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="15"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Border Name="leftBorder" Margin="2,2,0,2" Grid.RowSpan="4" CornerRadius="3,0,0,3" Panel.ZIndex="1" Background="{Binding Path=Type, Converter={StaticResource converter}}" /> 
    <Border Margin="0,0,0,0" Grid.Column="1" Grid.ColumnSpan="2" Grid.RowSpan="4" Background="#FF666666" CornerRadius="0,5,5,0" /> 
    <Border Margin="0,0,0,0" Grid.ColumnSpan="2" Grid.RowSpan="4" Background="{x:Null}" BorderThickness="2,2,2,2" BorderBrush="#FF202020" CornerRadius="5,5,5,5" Panel.ZIndex="0" /> 
    <TextBlock Padding="5,2,5,2" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Text="{Binding Path=Text}" Grid.Row="1" Grid.Column="1" Foreground="White" /> 
    <TextBlock Padding="5,2,5,2" HorizontalAlignment="Stretch" VerticalAlignment="Center" Text="{Binding Path=Author}" Grid.Row="2" Grid.Column="1" Foreground="White" /> 
</Grid> 
</UserControl> 

Comme vous pouvez le deviner, la valeur convertisseur est responsable de la conversion d'une certaine valeur à un pinceau. Cela fonctionne bien pour ce <local:MessageRowTemplate x:Name="questionControl" /> mais pas pour l'élément de zone de liste.

Google ne m'a pas donné de conseils sur les combinaisons de mots-clés de 'list box', 'list box item', 'user control', 'value converter'.

Avez-vous une idée?

Merci à l'avance.

Répondre

0

La zone de liste

<ListBox HorizontalAlignment="Stretch" ItemTemplate="{DynamicResource ResponsesListTemplate}" ItemsSource="{Binding}" Name="listBoxResponses" Height="200" ScrollViewer.VerticalScrollBarVisibility="Visible" Style="{StaticResource MuuriListboxStyle}" /> 

utilise la ResponsesListTemplat des ressources locales qui utilise à nouveau la MessageRowTemplate. Le convertisseur est utilisé dans ce modèle:

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

et appliquée à la première balise frontière dans le modèle.

Questions connexes