相关疑难解决方法(0)

如何实现BoolToVisibilityConverter

在我的应用程序中,我想切换StackPanel中项目的可见性.我的Stackpanel包含一个Image和一个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>
Run Code Online (Sandbox Code Playgroud)

代码背后

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 …
Run Code Online (Sandbox Code Playgroud)

c# xaml converter windows-phone-7 windows-phone-8

13
推荐指数
3
解决办法
2万
查看次数

使用ViewModel中的多态绑定到XAML中带参数的方法

我的ResultView中有一个带有六个选项卡的TabControl.位于此View后面的ViewModel可以是ResultTypeOneViewModel或ResultTypeTwoViewModel,每个ViewModel都派生自ResultViewModel,但您可以将结果查看器与结果类型互换使用.

不同之处在于,在ResultTypeOneViewModel中,需要显示选项卡1和3,并隐藏其余选项卡.在ResultTypeTwoViewModel中,需要显示选项卡2,3,4,5,6,隐藏选项卡1.

我想通过类似的方式做到这一点

<TabItem Name="1" Visibility={Binding IsTabVisible(0)}>
<TabItem Name="2" Visibility={Binding IsTabVisible(1)}>
<TabItem Name="3" Visibility={Binding IsTabVisible(2)}>
etc...
Run Code Online (Sandbox Code Playgroud)

并在ResultsViewModel中有一个抽象方法声明,如

public abstract Visibility IsTabVisible(int index);
Run Code Online (Sandbox Code Playgroud)

并且在ResultsOneViewModel中有

public override Visibility IsTabVisible(int index)
{
    if (index == 0 || index == 2) return Visibility.Visible;
    return Visibility.Hidden;
}
Run Code Online (Sandbox Code Playgroud)

并且在ResultsTwoViewModel中有

public override Visibility IsTabVisible(int index)
{
    if (index == 0) return Visibility.Hidden;
    return Visibility.Visible;
}
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何通过绑定iN WPF XAML使用参数调用这样的方法.

任何人都可以建议我如何做到这一点,或者如果通过这种方法不可能,另一种方法我可以解决这个问题?

wpf binding mvvm

11
推荐指数
1
解决办法
2万
查看次数

DataTampger中DataConmplate内部控件的Visibility无法正常工作

我有一个ListBox绑定到List,它有一个DataTemplate为它的项目.除了第二个TextBlock的可见性之外,DataTemplate中的所有内容都能正常工作!我不明白我做错了什么,我不想使用转换器,我已经检查了这些链接:

将Bool绑定到ListBox中的TextBlock的可见性

将Button的可见性绑定到ViewModel中的bool值

<ListBox Name="lsb_Jobs" Grid.Column="3" Grid.Row="2" Grid.RowSpan="6" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                     BorderThickness="0,1,0,0" Padding="0,5" Margin="0,10,5,5">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Grid Height="45">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="25"/>
                                <ColumnDefinition Width="250"/>
                                <ColumnDefinition Width="100"/>
                                <ColumnDefinition/>
                            </Grid.ColumnDefinitions>
                            <Grid.Style>
                                <Style TargetType="Grid">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding Importance}" Value="0">
                                            <Setter Property="Background" Value="LimeGreen"/>
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding Importance}" Value=".25">
                                            <Setter Property="Background" Value="NavajoWhite"/>
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding Importance}" Value=".5">
                                            <Setter Property="Background" Value="Gold"/>
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding Importance}" Value=".75">
                                            <Setter Property="Background" Value="Orange"/>
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding Importance}" Value="1">
                                            <Setter Property="Background" Value="OrangeRed"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Grid.Style>
                            <CheckBox Name="chb_IsDone" IsChecked="{Binding Done}" FlowDirection="LeftToRight" Checked="job_Done_Checked" Unchecked="job_Done_Checked"/>
                            <TextBlock …
Run Code Online (Sandbox Code Playgroud)

wpf xaml datatrigger

7
推荐指数
1
解决办法
3264
查看次数

带MVVM模式的WPF MessageBox?

假设我想向用户显示一些验证错误.在MVVM模式中,我可以有一个标签绑定到我的viewmodel上的某个属性.但是,如果我想在严格遵守MVVM模式的同时显示消息框,该怎么办呢?我的viewmodel会绑定什么,以及它将如何触发创建/显示消息框?

.net c# wpf messagebox mvvm

5
推荐指数
1
解决办法
1万
查看次数

Listview项目中的UWP按钮

我正在开发我的第一个UWP应用程序,我希望创建一个这样的UI .对于每个列表项(项目),将有一组按钮.对于某些列表项(项目),某些按钮将被禁用一些.因此,我需要在这些列表项(项目)中禁用和更改此类按钮的图像.

我尝试使用像这样的列表视图来实现它.但我不知道如何根据条件启用/禁用其中一些按钮.

尝试添加DataContextChanged事件并尝试访问那里的按钮.但不知道我如何访问这些按钮.

请告诉我以下方法是否正确,或者是否有更好的方法来完成我在上图中尝试实现的目标.

 <ListView x:Name="stepsListView" Margin="10,0,0,0" RequestedTheme="Dark" FontSize="24" Background="{StaticResource procedure_app_white}" Foreground="Black" BorderThickness="1.5" BorderBrush="Transparent" ItemsSource="{Binding projectList}"  HorizontalAlignment="Left">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListView.ItemContainerStyle>

    <!-- Item -->
    <ListView.ItemTemplate>
        <DataTemplate>
            <Border BorderThickness="0,0,0,1" BorderBrush="#c0c0c0">
                <Grid Width="auto" HorizontalAlignment="Stretch" DataContextChanged="Grid_DataContextChanged" >
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*"/>
                        <RowDefinition Height="50"/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock VerticalAlignment="Center" FontSize="30" Grid.Row="0" Grid.ColumnSpan="7" Text="{Binding projectName}" Foreground="{StaticResource procedure_app_orange_text }" />

                    <Button x:Name="warningButton" Width="40" Height="40" Grid.Column="1"  Grid.Row="1" Tag="{Binding projectId}" …
Run Code Online (Sandbox Code Playgroud)

c# xaml listview uwp uwp-xaml

2
推荐指数
1
解决办法
4409
查看次数

使用绑定的 UWP 应用显示/隐藏按钮

我有一个列表视图,它显示项目名称和每个项目的一些按钮,这些按钮执行不同的操作,例如为该项目添加评论查看图像等。根据项目的不同,某些项目有时会禁用其中一些按钮。并且某些按钮在某些项目中将不可见。所以我想在这段代码中使用数据绑定来实现两件事。

  1. 根据 ProjectModel 的一些布尔变量,我需要更改按钮的可见性。我尝试将按钮的可见性绑定到 ViewModel 中的 bool 值,但它似乎不适用于 uwp。

  2. 对于某些项目,当禁用该选项时,我需要显示不同的彩色图像。所以我需要根据 ProjectModel 的布尔变量更改 ImageBrush 的 ImageSource。为此,我使用触发器 WPF MVVM尝试了此更改图像,但这些样式触发器不适用于 uwp。

请让我知道如何在 UWP 应用中轻松完成这些操作。这是我的第一个 UWP 应用程序,我对这些概念不熟悉。

<ListView x:Name="stepsListView" Margin="10,0,0,0" RequestedTheme="Dark" FontSize="24" Background="{StaticResource procedure_app_white}" Foreground="Black" BorderThickness="1.5" BorderBrush="Transparent" ItemsSource="{Binding projectList}"  HorizontalAlignment="Left">
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            </Style>
        </ListView.ItemContainerStyle>
        <!-- Item -->
        <ListView.ItemTemplate>
            <DataTemplate>
                <Border BorderThickness="0,0,0,1" BorderBrush="#c0c0c0">
                    <Grid Width="auto" HorizontalAlignment="Stretch" DataContextChanged="Grid_DataContextChanged" >
                        <Grid.RowDefinitions>
                            <RowDefinition Height="*"/>
                            <RowDefinition Height="50"/>
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="100"/>
                            <ColumnDefinition Width="100"/>
                            <ColumnDefinition Width="100"/>
                            <ColumnDefinition Width="100"/> …
Run Code Online (Sandbox Code Playgroud)

c# xaml button uwp uwp-xaml

2
推荐指数
1
解决办法
5827
查看次数

WPF绑定不更新可见性

我在绑定到网格的可见性时遇到了麻烦。我有一些项目,我以前做过这个,并试图复制以前使用的相同编码,我已经搜索并根据其他一些文章在 bool 中添加到可见性转换器,但仍然没有。

到目前为止,我在这个项目中所做的就是提供一组将提供给用户的选项。当他们选择一个选项时,它会显示子选项或将它们带到适当的区域。我将绑定设置为 bool 对象,有时会创建一些小消息框和其他消息框,只是为了让我知道程序是否无处不在。一路上我得到了每个消息框,所以它似乎到达了每一段代码。

任何人都可以阐明我做错了什么或指出我正确的方向吗?

Windows.Resources 中的转换器(编辑以显示 Windows.Resources 中的所有代码)

<Window.Resources>
    <Style TargetType="{x:Type Button}">
        <Setter Property="FontSize" Value="15"/>
        <Setter Property="FontWeight" Value="Bold" />
        <Setter Property="Height" Value="50" />
        <Setter Property="Width" Value="100" />
        <Setter Property="Margin" Value="0,0,0,0" />
        <Setter Property="HorizontalAlignment" Value="Center" />
        <Setter Property="VerticalAlignment" Value="Center" />
    </Style>
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)

窗口其余部分的代码

<Grid>
    <Grid x:Name="grid_mainMenu" Visibility="{Binding MainMenuVisibility, Converter={StaticResource BooleanToVisibilityConverter}}" Margin="0,0,0,20">
        <Grid.RowDefinitions>
            <RowDefinition Height="1*"/>
            <RowDefinition Height="1*"/>
        </Grid.RowDefinitions>
        <Button x:Name="button_Items" Content="Items" Grid.Row="0" Click="button_Items_Click"/>
        <Button x:Name="button_Orders" Content="Orders" Grid.Row="1" Click="button_Orders_Click" />
        <TextBox Text="{Binding StatusMessage, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="0,0,0,0" HorizontalAlignment="Left" …
Run Code Online (Sandbox Code Playgroud)

c# wpf binding visibility

1
推荐指数
1
解决办法
4133
查看次数