Je crée un prototype d'application Silverlight dans Expression Blend 4 et j'essaie d'afficher/masquer les éléments ListBox/ComboBox en fonction des valeurs booléennes dans les données auxquelles ils sont liés. J'ai trouvé un exemple en ligne qui a suggéré cela fonctionnerait, mais il ne possède pas:Silverlight ListboxItem Visibility binding
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing"
xmlns:local="clr-namespace:PrototypeScreens"
mc:Ignorable="d"
x:Class="PrototypeScreens.Toolbar"
Width="640" Height="31">
<UserControl.Resources>
<local:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<ComboBox HorizontalAlignment="Right" Style="{StaticResource ComboBox-Sketch}" VerticalAlignment="Top" Width="32" ItemsSource="{Binding Sites}" >
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid>
<ed:RegularPolygon Fill="{StaticResource BaseBackground-Sketch}" ed:GeometryEffect.GeometryEffect="Sketch" HorizontalAlignment="Left" Height="10" InnerRadius="0.47211" Margin="0,0,0,0" PointCount="5" Stretch="Fill" Stroke="{StaticResource BaseBorder-Sketch}" StrokeThickness="2" UseLayoutRounding="False" Width="10"
Visibility="{Binding IsFavorite, Converter={StaticResource BooleanToVisibilityConverter}}" />
<TextBlock Style="{StaticResource BasicTextBlock-Sketch}" Text="{Binding Name}" HorizontalAlignment="Left" Margin="15,0,0,0" />
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
<!--
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Setter Property="Visibility" Value="{Binding IsRegistered, Converter={StaticResource BooleanToVisibilityConverter}}" />
</Style>
</ComboBox.ItemContainerStyle>
-->
</ComboBox>
<ListBox Height="29" Margin="0,0,32,0" Style="{StaticResource ListBox-Sketch}" VerticalAlignment="Top" ItemsSource="{Binding Sites}" ScrollViewer.HorizontalScrollBarVisibility="Hidden">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" FlowDirection="RightToLeft" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Style="{StaticResource BasicTextBlock-Sketch}" Text="{Binding Id}" HorizontalAlignment="Left" Margin="0,0,0,0" />
<ed:RegularPolygon Fill="{StaticResource BaseBackground-Sketch}" ed:GeometryEffect.GeometryEffect="Sketch" HorizontalAlignment="Left" Height="10" InnerRadius="0.47211" Margin="20,0,0,0" PointCount="5" Stretch="Fill" Stroke="{StaticResource BaseBorder-Sketch}" StrokeThickness="2" UseLayoutRounding="False" Width="10"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
<!--
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Visibility" Value="{Binding IsFavorite, Converter={StaticResource BooleanToVisibilityConverter}}" />
</Style>
</ListBox.ItemContainerStyle>
-->
</ListBox>
</Grid>
</UserControl>
Lorsque je tente de charger l'écran avec ce contrôle utilisateur, les application se bloque à moins que je commente les styles de conteneurs (comme dans le code ci-dessus). Qu'est-ce que je fais mal?
REMARQUE: La visibilité du polygone dans ComboBoxItem fonctionne correctement.
MISE À JOUR I inclus le XAML pour l'ensemble usercontrol
MISE À JOUR Je suis arrivé quelques détails d'erreur:
Webpage error details
User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; .NET4.0C; .NET4.0E; BRI/2)
Timestamp: Tue, 10 May 2011 15:21:02 UTC
Message: Unhandled Error in Silverlight Application Exception has been thrown by the target of an invocation. at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
at System.Reflection.Assembly.CreateInstance(String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
at Microsoft.Expression.Prototyping.Workspace.PlayerWindow.InstantiateScreen(String screen, Boolean showImmediately)
at Microsoft.Expression.Prototyping.Workspace.PlayerWindow.TransitionScreens(String from, String to)
at Microsoft.Expression.Prototyping.Navigation.NavigationViewModel.NavigateToScreen(String name, Boolean record)
Line: 1
Char: 1
Code: 0
URI: file:///D:/Projects/Expression/Prototype/Bin/Debug/Default.html
MISE À JOUR: Je pense avoir fait des progrès. Il semble que la liaison ne peut pas être résolue. Le ListBox et ComboBox ont tous deux ItemsSource="{Binding Sites}"
et Sites
est de type System.Collections.ObjectModel.ObservableCollection<SitesItem>
. SiteItem
a les propriétés IsRegistered
et IsFavorite
.
Donc je suppose que la question est: Est-il possible de lier à lier à IsRegistered
et IsFavorite
dans un ?
Où avez-vous mis la ressource statique pour votre 'BooleanToVisibilityConverter'? Peut-être que ce n'est pas créé avant l'application du style. Pouvez-vous fournir des détails sur l'accident? –
J'ai le 'BooleanToVisibilityConverter' défini. –
Il peut s'agir d'un problème de commande. Si le convertisseur n'est pas créé lorsque le style est appliqué, vous pouvez avoir un problème. Cela pourrait valoir la peine de voir si vous pouvez déterminer dans quel ordre les choses sont faites. –