c# – 如何实现BoolToVisibilityConverter
发布时间:2020-12-15 06:28:50 所属栏目:百科 来源:网络整理
导读:在我的应用程序中,我想在StackPanel中切换项目的可见性.我的Stackpanel包含一个图像和一个TextBlock.如何正确使用BoolToVisibilityConverter来切换TextBlock的可见性,并为用户保存此设置? 目前我所拥有的如下,虽然我有几个错误.重要说明,我需要使用一个Appl
在我的应用程序中,我想在StackPanel中切换项目的可见性.我的Stackpanel包含一个图像和一个TextBlock.如何正确使用BoolToVisibilityConverter来切换TextBlock的可见性,并为用户保存此设置?
目前我所拥有的如下,虽然我有几个错误.重要说明,我需要使用一个ApplicationBar菜单项作为驱动切换TextBox可视性的点击事件. 编辑 尽管TextBlock的可见性没有改变,但错误不再发生. XAML xmlns:common="clr-namespace:TestApp.Common" <phone:PhoneApplicationPage.Resources> <common:BooleanToVisibilityConverter x:Key="BoolToVisConv" /> </phone:PhoneApplicationPage.Resources> <ListBox Name="ListBoxEffects" SelectionMode="Single" ItemsSource="{Binding}" Margin="{Binding}" toolkit:TiltEffect.IsTiltEnabled="True" SelectionChanged="ListBox_SelectionChanged" ItemContainerStyle="{StaticResource ListBoxItemStyle1}"> <ListBox.ItemsPanel> <ItemsPanelTemplate> <toolkit:WrapPanel ItemWidth="159" ItemHeight="Auto" /> </ItemsPanelTemplate> </ListBox.ItemsPanel> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Vertical" > <Image Source="{Binding Thumbnail}" Width="155" Height="155" /> <TextBlock Text="{Binding Name}" Visibility="{Binding IsTextBlockVisible,Converter={StaticResource BoolToVisConv}}" TextWrapping="Wrap" FontSize="{StaticResource PhoneFontSizeNormal}" VerticalAlignment="Center" HorizontalAlignment="Center" /> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> 代码背后 private void BuildLocalizedApplicationBar() { ApplicationBar = new ApplicationBar(); ApplicationBarMenuItem showFilterNamesMenuItem = new ApplicationBarMenuItem(); if (Settings.ShowFilterNames.Value) showFilterNamesMenuItem.Text = AppResources.EditPage_EffectNames_Hide; else showFilterNamesMenuItem.Text = AppResources.EditPage_EffectNames_Show; showFilterNamesMenuItem.Click += showFilterNamesMenuItem_Click; ApplicationBar.MenuItems.Add(showFilterNamesMenuItem); } void showFilterNamesMenuItem_Click(object sender,EventArgs e) { if(Settings.ShowFilterNames.Value) { ((ApplicationBarMenuItem)ApplicationBar.MenuItems[0]).Text = AppResources.EditPage_EffectNames_Hide; Settings.ShowFilterNames.Value = false; //Toggle the text block visibility to here } else { ((ApplicationBarMenuItem)ApplicationBar.MenuItems[0]).Text = AppResources.EditPage_EffectNames_Show; Settings.ShowFilterNames.Value = true; //Toggle the text block visibility to here } } BooleanToVisibilityConverter的一个类 //Error on BooleanToVisibilityConverter stating does not implement interface member 'System.Windows.Data.IValueConverter.Convert(object,System.Type,object,System.Globalization.CultureInfo) public class BooleanToVisibilityConverter : IValueConverter { public class BooleanToVisibilityConverter : IValueConverter { public object Convert(object value,Type targetType,object parameter,CultureInfo language) { return (value is bool && (bool)value) ? Visibility.Visible : Visibility.Collapsed; } public object ConvertBack(object value,CultureInfo language) { return value is Visibility && (Visibility)value == Visibility.Visible; } } 解决方法
尝试这个:
public class BooleanToVisibilityConverter : IValueConverter { private object GetVisibility(object value) { if (!(value is bool)) return Visibility.Collapsed; bool objValue = (bool)value; if (objValue) { return Visibility.Visible; } return Visibility.Collapsed; } public object Convert(object value,string language) { return GetVisibility(value); } public object ConvertBack(object value,string language) { throw new NotImplementedException(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |