【问题标题】:Wpf button data triggerWpf 按钮数据触发
【发布时间】:2015-07-31 13:12:01
【问题描述】:

我的 wpf 表单中有一个按钮,当我单击该按钮时,该按钮在 mvvm 应用程序中具有图像文本,它将附加文件,我的要求是当它成功附加时,我想从按钮中删除图像并想用一些文本更新按钮。

 <StackPanel Grid.Row="3" Orientation="Horizontal" HorizontalAlignment="Right">
            <Button ToolTip="Attach Approval" 
                    Height="25" 
                    Command="{Binding AddAttachmentCommand}" 
                    Margin="5,10,5,10">
                <StackPanel Orientation="Horizontal">
                    <Image Source="/UILibrary;component/Themes/Default/Images/Attach.PNG"/>
                </StackPanel>
                <Button.Style>
                    <Style TargetType="{x:Type Button}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsAttachmentAvailable}" Value="True">
                                <Setter Property="Visibility" Value="Visible"/>
                                <Setter Property="Content" Value="Appprove"/>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding IsAttachmentAvailable}" Value="False">
                                <Setter Property="Visibility" Value="Visible"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Button.Style>

            </Button>
            <StackPanel Orientation="Horizontal" 
                        Height="25"  
                        Margin="5,10,5,10"
                        Visibility="{Binding IsAttachmentAvailable, Converter={StaticResource BooleanToVisibilityConverter}}">              
                <TextBlock Margin="3">
                    <Hyperlink Command="{Binding OpenAttachmentCommand}"> 
                        <TextBlock Text="{Binding Attachment.FileName}"/>
                    </Hyperlink>
                </TextBlock>
                <customControls:CloseButton Width="15" Height="15" Command="{Binding RemoveAttachmentCommand}">
                    <customControls:CloseButton>
                        Remove attachment
                    </customControls:CloseButton>
                </customControls:CloseButton>
            </StackPanel>
            <Button Height="25" 
                    Width="80" 
                    Margin="5,10,5,10"
                    Content="Approve" 
                    Command="{Binding ApproveTemplateCommand}"/>
            <Button Height="25" 
                    Width="80" 
                    Margin="5,10,5,10"
                    Content="Preview" 
                Command="{Binding PreviewTemplateCommand}"/>
            <Button Content="Save" 
                Command="{Binding SaveTemplateCommand}" 
                Height="25"
                    Width="80"                    
                    Margin="5,10,5,10"/>
            <Button Height="25"
                    Width="80"
                    Margin="5,10,10,10"
                    Content="Cancel"
                    Command="{Binding CancelCommand}"/>
        </StackPanel>    

【问题讨论】:

    标签: wpf xaml mvvm attachment


    【解决方案1】:

    如果Button.Content 像您一样在&lt;Button&gt; 标记中设置,它将优先于任何样式值。

    您需要将您的 StackPanel 直接移出 &lt;Button.Content&gt; 标记,并将其放入样式或其他数据触发器中。

    <Button ToolTip="Attach Approval" 
            Height="25" 
            Command="{Binding AddAttachmentCommand}" 
            Margin="5,10,5,10">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <!-- Default Content value -->
                <Setter Property="Content">
                    <Setter.Value>
                        <StackPanel Orientation="Horizontal">
                            <Image Source="/UILibrary;component/Themes/Default/Images/Attach.PNG"/>
                        </StackPanel>
                    </Setter.Value>
                </Setter>
    
                <!-- Triggered values -->
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsAttachmentAvailable}" Value="True">
                        <Setter Property="Visibility" Value="Visible"/>
                        <Setter Property="Content" Value="Appprove"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding IsAttachmentAvailable}" Value="False">
                        <Setter Property="Visibility" Value="Visible"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    

    更多信息请参见MSDN's Dependency Property Precedence List

    【讨论】:

    • 更改文本后如何添加命令绑定属性?
    • @user3089816 您可以使用相同的语法将几乎任何属性添加到样式或数据触发器:&lt;Setter Proprety="Command" Value="{Binding AddAttachmentCommand}" /&gt;
    • @user3089816 你还在Command 标签中设置了Command 属性吗?此处适用相同的依赖属性优先规则:&lt;Tag&gt; 中定义的属性优先于 Style 或 DataTrigger 中应用的属性。
    • 嗨@rachel,在上面的代码中,我声明了 AddAttachmentCommand 命令,它在附件成功后工作正常,按钮内容更改为批准,然后我又声明了一个命令 再次执行此操作后,它正在触发上一个命令(AddAttachmentCommand)......
    • @user3089816 您必须共享您的代码才能确定确切的问题。也许为它打开一个新问题?
    猜你喜欢
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 2012-08-24
    • 1970-01-01
    相关资源
    最近更新 更多