Silverlight: как изменить ширину элементов ListBox в ответ на ввод пользователя? - PullRequest
1 голос
/ 26 апреля 2010

У меня есть простой Silverlight 3 UserControl, ширина которого увеличивается или уменьшается в зависимости от ввода пользователя.

Элементы управления становятся более широкими или более узкими по желанию, за исключением элементов ListBox. Элементы ListBox растут горизонтально, чтобы соответствовать их содержимому, независимо от того, что для HorizontalContentAlignment установлено значение «Растянуть».

Должен ли я иметь возможность установить свойство в ListBox.ItemContainerStyle, чтобы сказать ему расширяться / сужаться с родительским ListBox? В этом списке не должно быть горизонтальной прокрутки.

Или есть способ указать ширину StackPanel ItemTemplate, который можно изменить во время выполнения? Я связал это со StaticResource, но не понимаю, смогу ли я изменить значение ресурса. Могу ли я создать и привязать к DependencyProperty самого UserControl? Я не определил синтаксис этого в xaml.

код:

<UserControl x:Class="TheAssembly.GraphicViewer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:userControls="clr-namespace:TheAssembly"
xmlns:core="clr-namespace:System;assembly=mscorlib">
<UserControl.Resources>
    <userControls:DictionaryAttributeConverter x:Name="MyDictionaryAttributeConverter" />
    <core:Double x:Key="ListItemWidth">155</core:Double>       
</UserControl.Resources> 
<Grid x:Name="LayoutRoot"  Width="175" >
    <Border Style="{StaticResource DraggableWindowBorder}">
        <StackPanel x:Name="RootStackPanel" Orientation="Vertical" HorizontalAlignment="Stretch">
            <Border Background="Black" HorizontalAlignment="Stretch" Margin="0">  
                <TextBlock x:Name="Header" Foreground="White" FontSize="14" TextWrapping="Wrap" Margin="2,0,2,0" 
                           Height="25" HorizontalAlignment="Left"
                           Text="{Binding HeaderText}"/>
            </Border>
            <TextBlock x:Name="Title"  Style="{StaticResource GraphicViewerDetail}" FontSize="12" FontWeight="Medium" TextWrapping="Wrap" 
               Text="{Binding Title}" Margin="3,0,0,0" HorizontalAlignment="Left"/>
            <ListBox x:Name="AttributeListBox" ItemsSource="{Binding Attributes}" BorderBrush="Red" HorizontalContentAlignment="Stretch"
                 Foreground="AntiqueWhite" Background="Transparent" IsEnabled="False" HorizontalAlignment="Stretch"  
                     ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.HorizontalScrollBarVisibility="Hidden">
                <ListBox.ItemContainerStyle>
                    <Style TargetType="ListBoxItem">
                        <Setter Property="HorizontalAlignment" Value="Stretch"/>
                        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                        <Setter Property="Margin" Value="0,-2,0,0"/>
                    </Style>
                </ListBox.ItemContainerStyle>
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel x:Name="ListBoxItemStackPanel" HorizontalAlignment="Stretch" Orientation="Vertical" >
                            <TextBlock FontSize="10" Text="{Binding Key}" Foreground="White" FontWeight="Bold"  HorizontalAlignment="Stretch"
                                  Margin="2,0,0,0" TextWrapping="Wrap"/>
                            <TextBlock FontSize="10"  Text="{Binding Value}" Foreground="White" Margin="6,-2,0,0" TextWrapping="Wrap" 
                                       HorizontalAlignment="Stretch" />
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </StackPanel>
    </Border>
</Grid>

...