使用 C# 在 VisualBrush 中设置图像运行时

2023-12-10

实际上我将设计时从资源中获取的图像设置为xaml像这样的文件:

<Button Click="btnLogin_Click" Name="btnLogin">
    <StackPanel Orientation="Horizontal">
        <Rectangle Width="20" Height="20" Name="recLogin">
            <Rectangle.Resources>
                <SolidColorBrush x:Key="BlackBrush" Color="White" />
            </Rectangle.Resources>
            <Rectangle.Fill>
                <VisualBrush Stretch="Fill" Visual="{StaticResource appbar_user}" x:Name="brushLogin" />
            </Rectangle.Fill>
        </Rectangle>
        <TextBlock Text=" login" Name="txbLogin" />
    </StackPanel>
</Button>

并且工作正常。但(是登录按钮)我希望当用户登录时,按钮上的图像(长方形内)会被改变..

我能怎么做?


您可以使用DataTrigger当模型中的属性更新时更改图像。

在此示例中,布尔值IsLoggedIn发生改变,进而改变图像。

Example:

Xaml:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="125.078" Width="236.441" Name="UI" >
    <Window.Resources>

        <VisualBrush x:Key="Loggedin">
            <VisualBrush.Visual>
                <Image Source="http://icons.iconarchive.com/icons/deleket/sleek-xp-basic/32/Ok-icon.png" Stretch="Uniform" />
            </VisualBrush.Visual>
        </VisualBrush>

        <VisualBrush x:Key="NotLoggedin">
            <VisualBrush.Visual>
                <Image Source="http://icons.iconarchive.com/icons/deleket/sleek-xp-basic/32/Close-2-icon.png" Stretch="Uniform" />
            </VisualBrush.Visual>
        </VisualBrush>

    </Window.Resources>

    <Grid DataContext="{Binding ElementName=UI}">
        <Button Click="btnLogin_Click" Name="btnLogin" HorizontalAlignment="Left" Width="94" Height="40" VerticalAlignment="Top" Margin="63,26,0,0">
            <StackPanel Orientation="Horizontal">
                <Rectangle Width="20" Height="20" Name="recLogin">
                    <Rectangle.Resources>
                        <SolidColorBrush x:Key="BlackBrush" Color="White" />
                    </Rectangle.Resources>
                    <Rectangle.Style>
                        <Style TargetType="{x:Type Rectangle}">
                            <Setter Property="Fill" Value="{StaticResource NotLoggedin}" />
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding IsLoggedIn}" Value="True">
                                    <Setter Property="Fill" Value="{StaticResource Loggedin}" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </Rectangle.Style>
                </Rectangle>
                <TextBlock Text=" login" Name="txbLogin" />
            </StackPanel>
        </Button>
    </Grid>
</Window>

Code:

public partial class MainWindow : Window, INotifyPropertyChanged
{
    private bool _isLoggedIn;

    public MainWindow()
    {
        InitializeComponent();  
    }

    public bool IsLoggedIn
    {
        get { return _isLoggedIn; }
        set { _isLoggedIn = value; NotifyPropertyChanged("IsLoggedIn"); }
    }

    private void btnLogin_Click(object sender, RoutedEventArgs e)
    {
        IsLoggedIn = !IsLoggedIn;
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string property)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }
 }

Note:我只是使用在线图片,因为我没有你的资源,你可以根据你的需要进行更改

Result:

IsLoggedIn = false; enter image description here IsLoggedIn = true; enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 C# 在 VisualBrush 中设置图像运行时 的相关文章

  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 按成员序列化

    我已经实现了template
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 通过 htaccess 将 PNG 解析为 PHP 仅适用于本地服务器,但不适用于网络服务器

    我用 PHP 创建了一个动态 PNG 图片 为了使用 PNG 扩展名 我创建了一个包含以下内容的 htaccess 文件 AddType application x httpd php png 在我的本地 XAMPP 服务器上 一切工作正常
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 使用 Django 的 ORM 的模型继承方法

    我想将事件存储在我正在闲逛的 Web 应用程序中 并且我非常不确定每种方法的优缺点 广泛使用继承或以更温和的方式使用继承 Example class Event models Model moment models DateTimeFiel
  • 如何安装肥皂扩展?

    如何安装肥皂 我收到这个错误 致命错误 在第 16 行 home user mysite com path to file php 中找不到类 SoapClient 我在 DreamHost 中托管我的网站 他们不支持任何第三方安装 UPD
  • 如何连接 Web API Castle Windsor DI 代码的各个部分?

    如何连接 Web API Castle Windsor DI 代码的各个部分 以便控制器的路由选择正确的接口实现 Note 经过几次错误的开始 死胡同和部分胜利 here and here and here 我将尽快给予最大的赏金500点
  • 设置从包含注释的 json 加载的对象的属性值

    当从 json 文件加载对象时 通常可以设置属性值并将文件写回 如下所示 manifest gc manifestPath ConvertFrom Json AsHashtable manifest name manifest name s
  • 在 DatePIcker 中设置 MinDate 和 MaxDate

    创建应用程序 其中我显示 DatePicker 现在我想设置 DatePicker 的 MinDate 是前两年 最大日期仅是未来两年 选择应基于当前日期 假设当前日期是 23 11 2016 因此 datepicker 应显示日期直到 2
  • iPhone 无法通过 WiFi 连接到本地 HTTP 服务器

    使用以下命令时 我无法打开在 iPhone 6s iOS 9 2 中的 MacBook 上运行的 HTTP 服务器提供的静态 HTML 页面 无论是在 Safari 还是 Chrome 浏览器中 http ipNumberOfMyServe
  • PHP 禁用输出缓冲

    我已经关掉了输出缓冲在 PHP 中通过设置output buffering off在 php int 中 但是当运行这样的简单代码时
  • 二维数组传递给函数

    我一直在读这个question但我无法获得解决问题的结果代码 我应该如何改变它才能使其发挥作用 void print2 int array int n int m main int array 4 1 2 3 4 5 6 7 8 int a
  • 使用通用参数执行远程通用 Powershell 脚本

    我需要编写一个 Powershell 脚本 我们称之为 控制器脚本 它能够调用传递通用参数的通用远程 Powershell 脚本 控制器脚本接受主机名 凭据 远程脚本路径和远程脚本参数 作为哈希表 作为参数 相反 远程脚本可以是接受任何字符
  • 有没有办法找出哪些STL头文件没有被直接包含?

    我们的产品使用C 作为编程语言 使用 C STL 的一个恼人的问题是我们忘记包含必要的头文件 因为该文件可能已包含在其他一些 STL 头文件中 构建会通过 例如 在使用Xcode的Mac平台上 如果我使用std auto ptr不包括mem
  • 如何实现自旋锁以避免阻塞

    考虑以下代码 Below block executed by thread t1 synchronized obj obj wait 0 This block executed by thread t2 synchronized obj o
  • FbChatBot 将消息标记为已读

    我正在开发 Facebook 聊天机器人 我想将消息标记为已读 这样当我们的 Facebook 页面的版主查看消息部分时 他们就不会看到那么多未读消息 即使 Facebook 聊天机器人已经回复了该用户他们不需要单击该消息只是将其标记为 已
  • 以编程方式禁用屏幕超时

    从这篇文章来看 Android 在应用程序运行时禁用屏幕超时 我可以通过禁用屏幕超时 getWindow addFlags WindowManager LayoutParams FLAG FULLSCREEN WindowManager L
  • 如何形成 dbPedia iSPARQL 查询(针对维基百科内容)

    假设我需要从维基百科获取有关所有山脉的内容 我的目标是显示初始段落和相应文章中的图像 例如罗莎山 and 文森特金字塔 我开始了解 dbpedia 并通过一些研究发现它直接提供对 wiki 数据库的实时查询 我有两个问题 1 我发现很难如何
  • memcpy 错误:分段错误(核心转储)

    我正在尝试使用 memcpy 和以下代码将一个字符串复制到 c 中的另一个字符串 include
  • 是否可以使用非特殊文件夹作为FolderBrowserDialog的根文件夹?

    FolderBrowserDialog RootFolder 属性仅限于中定义的特殊文件夹环境 特殊文件夹枚举器 然而 在我的应用程序中 我们需要显示此对话框 但根路径需要可配置 并且通常是自定义文件夹 与枚举器中的任何特殊文件夹无关 如何
  • 我可以将 NUnit 3 测试添加到 Visual Studio 2015 负载测试中吗?

    我有一个用 C 编写的测试自动化框架 其中单元测试用NUnit 不是MS测试 我创建了一个新的Visual Studio 负载测试配置 我希望能够将这些 NUnit 测试添加到负载测试中 但是 Visual Studio 2015 没有列出
  • PHP不会输出新行[重复]

    这个问题在这里已经有答案了 我已经尝试了在 PHP 中输 出换行符的所有方法 为什么以下不起作用 这应该在 hello 和 bar 之间输出换行符 但事实并非如此 我也尝试过 r n 而不是 n 如果您将其用作命令行脚本 那么这将起作用 我
  • 由 mysql 数据库填充的 UIscroll 单元格中的图像

    我被困在某处 我使用 PHP 动态地从 MYSQL 数据库中提取图像 直到我达到从 URL 检索照片名称的程度为止 一切都正常 我想在 UIScroll View 上动态插入缩略图 以便用户可以水平滚动以查看所有图像 照片描述 照片摘要 我
  • 使用 C# 在 VisualBrush 中设置图像运行时

    实际上我将设计时从资源中获取的图像设置为xaml像这样的文件