将颜色属性从 xaml 绑定到 c#

2024-02-03

我正在尝试将自制控件的属性从我的视图绑定到我的视图模型。当我将颜色直接绑定到 xaml 中的另一个元素时,它可以工作,但是当我尝试将它绑定到我的视图模型中的属性时。财产没有变化。

xaml:

<StackPanel>
    <Border Height="50"
            BorderBrush="Black"
            BorderThickness="1">
        <Border.Background>
            <SolidColorBrush Color="{Binding color}" />
        </Border.Background>
    </Border>
    <Border Height="50"
            BorderBrush="Black"
            BorderThickness="1">
        <Border.Background>
            <SolidColorBrush Color="{Binding ElementName=colorCircle, Path=selectedColor}" />
        </Border.Background>
    </Border>

    <local:ColorCircle x:Name="colorCircle" selectedColor="{Binding color, Mode=OneWayToSource}" />

</StackPanel>

.cs:

public partial class MainWindow : Window, INotifyPropertyChanged
{
    private Color _color;
    public Color color
    {
        get { return _color; }
        set
        {
            _color = value;
            RaisePropertyChanged("color");
        }
    }

    public MainWindow()
    {
        DataContext = this;
        InitializeComponent();
    }

    protected virtual void RaisePropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    public event PropertyChangedEventHandler PropertyChanged;
}

色轮

xaml:

<Grid HorizontalAlignment="Center"
      VerticalAlignment="Center"
      Background="Transparent">

    <Image x:Name="ColorImage"
           Width="300"
           Height="300"
           HorizontalAlignment="Center"
           VerticalAlignment="Top"
           RenderOptions.BitmapScalingMode="HighQuality"
           Source="color_wheel.png" />

    <Canvas x:Name="CanvImage"
            Width="300"
            Height="300"
            HorizontalAlignment="Center"
            VerticalAlignment="Top"
            Background="Transparent">

        <Ellipse Width="300"
                 Height="300"
                 HorizontalAlignment="Center"
                 VerticalAlignment="Top"
                 Fill="Transparent"
                 MouseDown="Ellipse_MouseDown"
                 MouseMove="Ellipse_MouseMove"
                 MouseUp="Ellipse_MouseUp" />
        <Ellipse x:Name="ellipsePixel"
                 Canvas.Left="150"
                 Canvas.Top="150"
                 Width="10"
                 Height="10"
                 Fill="Transparent"
                 MouseDown="Ellipse_MouseDown"
                 MouseMove="Ellipse_MouseMove"
                 MouseUp="Ellipse_MouseUp"
                 Stroke="Black"
                 StrokeThickness="2" />
    </Canvas>
</Grid>

.cs:

public partial class ColorCircle : UserControl
{
    public static readonly DependencyProperty SelectedColorProperty =
        DependencyProperty.Register("selectedColor", typeof(SolidColorBrush), typeof(ColorCircle));

    private SolidColorBrush _selectedColor = new SolidColorBrush(Colors.Transparent);
    public SolidColorBrush selectedColor
    {
        get { return (SolidColorBrush)GetValue(SelectedColorProperty); }
        set
        {
            if (_selectedColor != value)
            {
                SetValue(SelectedColorProperty, value);
            }
        }
    }

    private bool __isMouseDown { get; set; } = false;
    private bool _isMouseDown
    {
        get { return __isMouseDown; }
        set
        {
            __isMouseDown = value;
            if (__isMouseDown) ColorSelect();
        }
    }

    public ColorCircle()
    {
        InitializeComponent();
        DataContext = this;
    }

    private void ColorSelect()
    {
        try
        {
            CroppedBitmap cb = new CroppedBitmap(ColorImage.Source as BitmapSource,
                new Int32Rect((int)Mouse.GetPosition(CanvImage).X,
                    (int)Mouse.GetPosition(CanvImage).Y, 1, 1));

            byte[] pixels = new byte[4];

            try
            {
                cb.CopyPixels(pixels, 4, 0);
            }
            catch (Exception) { }

            ellipsePixel.SetValue(Canvas.LeftProperty, Mouse.GetPosition(CanvImage).X - 5);
            ellipsePixel.SetValue(Canvas.TopProperty, Mouse.GetPosition(CanvImage).Y - 5);
            CanvImage.InvalidateVisual();
            selectedColor = new SolidColorBrush(Color.FromArgb(255, pixels[2], pixels[1], pixels[0]));

        }
        catch (Exception) { }
    }

    private void Ellipse_MouseMove(object sender, MouseEventArgs e)
    {
        if (_isMouseDown) ColorSelect();
    }

    private void Ellipse_MouseDown(object sender, MouseButtonEventArgs e)
    {
        _isMouseDown = true;
    }

    private void Ellipse_MouseUp(object sender, MouseButtonEventArgs e)
    {
        _isMouseDown = false;
    }
}

The colorcircle has a DependencyProperty selectedColor返回一个Color。这样可行。我在第二个边框中得到了颜色,但在第一个边框中没有得到颜色......


您的代码不起作用的原因是您将 SolidColorBrush 的 Color 属性绑定到 ColorPicker ViewModel 中的 SolidColorBrush 属性

将 SelectedColor 类型更改为 Color

主XAML

 <StackPanel>
        <Border Height="50"
            BorderBrush="Black"
            BorderThickness="1">
            <Border.Background>
                <SolidColorBrush Color="{Binding color}" />
            </Border.Background>
        </Border>
        <Border Height="50"
            BorderBrush="Black"
            BorderThickness="1">
            <Border.Background>
                <SolidColorBrush Color="{Binding ElementName=colorPicker, Path=SelectedColor}" />
            </Border.Background>
        </Border>

        <local:ColorPicker x:Name="colorPicker" />

    </StackPanel>

Xaml.CS 对于以上 XAML

public partial class MainWindow : Window
{
    private Color _MyColor;

    public Color MyColor
    {
        get { return _MyColor; }
        set { _MyColor = value; }
    }

    public MainWindow()
    {            
        InitializeComponent();
        MyColor = Colors.Orange;
        this.DataContext = this;
    }

}

颜色选择器.xaml

<Grid>
    <Button Click="Button_Click" Content="Click Me To Change Color"/>
</Grid>

ColorPicker.xaml.cs

 public partial class ColorPicker : UserControl, INotifyPropertyChanged
    {
        List<Color> _myColors = new List<Color>() 
        { Colors.Yellow, Colors.Green, Colors.Orange, Colors.Red };

        public Color SelectedColor
        {
            get { return (Color)GetValue(SelectedColorProperty); }
            set { SetValue(SelectedColorProperty, value); OnPropertyChanged("SelectedColor"); }
        }


        public static readonly DependencyProperty SelectedColorProperty =
            DependencyProperty.Register("SelectedColor", typeof(Color), typeof(ColorPicker), new PropertyMetadata(null));        

        public ColorPicker()
        {
            InitializeComponent();
            SelectedColor = _myColors[0];
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            int index = _myColors.IndexOf(SelectedColor);
            if (index == _myColors.Count - 1)
            {
                index = 0;
            }
            else
            {
                index++;
            }

            SelectedColor = _myColors[index];
        }

        public event PropertyChangedEventHandler PropertyChanged;


        public void OnPropertyChanged(String propname)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propname));
            }
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将颜色属性从 xaml 绑定到 c# 的相关文章

  • 未找到 DEADLINE 调度策略

    我想在 C 中实现 DEADLINE 调度策略 我知道该功能已实现Linux 3 14 10我正在使用 Ubuntu 14 04Linux 3 17 0 031700 lowlatency 201410060605 SMP PREEMPT这
  • MVVM 在 iOS 中的使用

    我是一名 iOS 开发人员 我对我的项目中存在大量视图控制器感到内疚 因此我一直在寻找更好的方法来构建我的项目 并遇到了 MVVM 模型 视图 视图模型 架构 我读了很多关于 iOS 的 MVVM 文章 但有几个问题 我将用一个例子来解释我
  • 来自 double 的 static_cast 可以优化分配给 double 吗?

    我偶然发现了一个我认为不必要的功能 并且通常让我感到害怕 float coerceToFloat double x volatile float y static cast
  • C# 结构默认值

    我有一个方法 它接受一个包含许多具有基本数据类型的字段的结构 我想传递大部分默认值 但需要进行一些调整 但我了解结构声明中的基本字段不能包含默认值声明 例如struct S int a 42 现在是这样的 OptionsStruct opt
  • 加载 QPixmap 数据的更好方法

    更好的方法来做到这一点 没有QImage QImage image width height QImage Format RGB888 memcpy image bits m frameRGB gt data 0 height width
  • 公交车公共交通算法

    我正在开发一个可以查找公交路线的离线 C 应用程序 我可以提取时间表 巴士 路线数据 我正在寻找适用于基本数据的最简单的解决方案 可以使用什么算法来查找从巴士站 A 到巴士站 B 的路线 是否有适用于 C Java 的开源解决方案 数据库的
  • X 轴和 Z 轴上的 Quaternion.Slerp,无 Y 轴

    I am trying to rotate the Player about X Y and Z axis The Y axis should not move from last angle Example if I rotate 45
  • 如何在 C++ 中正确使用 cin.fail()

    我正在编写一个程序 从用户那里获取整数输入cin gt gt iUserSel 如果用户输入一个字母 程序就会进入无限循环 我试图用下面的代码来阻止这种情况 但程序进入无限循环并打印出 错误 输入 我该如何修复我的程序 cin gt gt
  • main.cpp 是必需的吗?

    我试图编译一个程序cmake 我最终删除了我的main cpp文件 我刚刚将其复合到另一个包含我的项目名称的文件中 即 我刚刚将主函数剪切并粘贴到该文件中 问题是我有一个main cpp未发现错误 不确定是否在C 一个名为main cpp是
  • 将 AutomationID 与 ListView 结合使用

    我正在尝试将 AutomationId 附加到列表视图中的项目 理想情况下 将项目名称绑定到显示的项目
  • 运行实体框架自定义工具,它有什么作用?

    在 Visual Studio 中 当使用实体框架并为 tt 和 Context tt 文件应用运行自定义工具时 它是什么以及它有什么作用 为什么它解决数据库同步问题 有时 为什么我应该在运行 tt 之前运行它 Context tt 它被称
  • fgets溢出后如何清除输入缓冲区?

    当输入字符串超出其预定义限制时 我遇到了 fgets 的小问题 以下面的例子为例 for index 0 index lt max index printf Enter the d string index 1 if fgets input
  • 如何在VS2005中使用从.bat而不是.exe启动的外部程序进行调试?

    在我的 c 项目的调试属性中 我选择了 启动外部程序 并选择了我希望将调试器附加到的程序的 exe 但是 现在我需要从 bat 文件而不是 exe 启动程序 但 VS2005 似乎不允许这样做 这可能吗 编辑 为了澄清 我需要调试从 bat
  • g++ / gcc 是否支持 C++20 新的atomic_flag 功能?

    根据参考参数 https en cppreference com w cpp atomic atomic flag c 20 有丰富的 对我来说有用的 支持atomic flag运营 然而 目前尚不清楚 gcc 是否支持这些功能 它们在任何
  • 使用未命名命名空间而不是静态命名空间

    我可以假设在未命名命名空间中声明的对象相当于static namespace int x 1 static int x 2 FWIK 在这两种情况下 x将具有静态存储期限和内部链接 声明为的对象的所有规则也是如此static适用于未命名名称
  • 让 Windows 尝试读取文件

    我正在对 Windows 文件系统进行某种封装 当用户请求打开文件时 Windows 调用我的驱动程序来提供数据 在正常操作中 驱动程序返回缓存的文件内容 但是 在某些情况下 实际文件没有缓存 我需要从网络下载它 问题是是否有可能让 Win
  • 为什么我可以在另一个函数中定义一个函数?

    请参阅下面的代码 我在另一个函数中定义了一个函数 void test1 void void test2 void printf test2 n printf test1 n int main void test1 return 0 这个用法
  • c++ - <未解析的重载函数类型>

    在我的班级里叫Mat 我想要一个将另一个函数作为参数的函数 现在我有下面 4 个函数 但是在调用 print 时出现错误 第二行给了我一个错误 但我不明白为什么 因为第一行有效 唯一的区别是功能f不是班级成员Mat but f2是 失败的是
  • 在多线程环境中捕获信号

    我有一个大型程序 需要尽可能具有弹性 并且有大量线程 我需要捕获所有信号SIGBUS SIGSEGV 并在必要时重新初始化有问题的线程 或者禁用该线程以继续减少功能 我的第一个想法是做一个setjump 然后设置信号处理程序 可以记录问题
  • NHibernate:无状态会话错误消息无法获取代理

    我正在使用 nHibernate 无状态会话来获取对象 更新一个属性并将对象保存回数据库 我不断收到错误消息 无状态会话无法获取代理 我在其他地方有类似的代码 所以我不明白为什么这不起作用 有谁知道问题可能是什么 我正在尝试更新Screen

随机推荐

  • 播放后重定向 html5 视频

    我有一个 html 5 视频 我删除了控制按钮并添加了 js 代码 以便用户在单击视频时播放视频 我需要做的是绑定一个额外的脚本 该脚本将在视频播放后重定向页面 而无需重新加载页面 下面是我的js代码 function play var v
  • 如何获取colspan的值

    我尝试过不同的 jQuery 方法 var num this attr colspan text var num this attr colspan val var num this td colspan val var num this
  • 在c#中将字符串转换为十进制

    我在使用decimal parse 将字符串转换为十进制值时遇到一些问题 这是我的代码行 fixPrice decimal Parse mItemParts Groups price Value Replace Replace Replac
  • 开发人员是否需要为在 Windows Azure Marketplace 上发布 SaaS 应用程序付费?

    目前我正在构建一个简单的 SaaS 驱动的 TMS 目的是在 Windows Azure Marketplace 中发布它 我无法找到任何定价 微软是否向开发者收取发布费用 是按月计算的吗 或者 Windows Azure 上托管的所有应用
  • OpenGL-OpenCL 互操作传输时间 + 位图纹理

    两部分问题 我正在开展一个学校项目 使用生命游戏作为实验 gpgpu 的工具 我使用 OpenCL 和 OpenGL 进行实时可视化 目标是让这个东西尽可能大 更快 经过分析 我发现帧时间主要由 CL 获取和释放 GL 缓冲区决定 并且时间
  • JavaScript 初学者遇到的引号问题

    我正在尝试从一本书 Jeremy McPeak 的 Beginner JavaScript 中学习 JS 但我坚持使用以下代码 html 中的结果是这样的 56 02 degrees centigrade is 56 as an integ
  • 如何分发带有依赖库的 Mac OS X?

    我有一个程序 特别是我的条目SO DevDays 倒计时应用挑战 https meta stackexchange com questions 20420 countdown app for devdays 21659 21659 它依赖于
  • 基于多个文件的存在激活 Maven 配置文件

    我想根据多个文件的存在来激活配置文件 在下面的示例中 如果两个文件都被激活 我希望配置文件被激活my marker and another marker exists
  • 包恢复失败。回滚包更改

    当我尝试在 VS2017 中为 asp net core 安装任何 nuget 包时 它不断显示每个 包的 包恢复失败 回滚包更改 您可以执行以下步骤 VS Tools Options Nuget 包管理器 General 清除所有 Nug
  • Gradle编译:如何从依赖关系中识别组和模块?

    有时 我不想添加所有依赖项 因此我需要从依赖项中排除一些依赖项 例如 compile com google http client google http client 1 20 0 exclude group org apache htt
  • ODBC Teradata 驱动程序 HY001 内存分配错误。什么意思?

    我正在使用 python 脚本 该脚本使用 teradata python 模块和类似于下面的脚本将一批数据插入 Teradata 它使用 ODBC 连接 偶尔会出现以下错误 HY001 Teradata ODBC Teradata Dri
  • 将 MutationGroup 流式传输到 Spanner 中

    我正在尝试使用 SpannerIO 将 MutationGroups 流式传输到扳手中 目标是每 10 秒写入新的 MuationGroup 因为我们将使用 Spanner 来查询近期 KPI 当我不使用任何 Windows 时 出现以下错
  • 我怎样才能记住所有CSS简写?

    我从未忘记并且总是使用速记margin and padding因为它是顺时针运行的 但是你怎么记得其他的呢 你是否尽可能使用 CSS 简写 记住不同简写的最佳方法是什么 Update 我还发现了 2 个很好的速记备忘单 Png http w
  • IntelliJ IDEA 在调试时停留在“收集数据”

    我正在使用 IntelliJ IDEA 来调试远程 tomcat 应用程序 之前效果很完美 然而 最近一段时间 它总是卡在 收集数据 上 尽管数据很小 我在这个网站上搜索过 并尝试过 Intellij IDEA在调试模式下非常慢 在正常模式
  • Autofac SingleInstance 不工作

    我正在尝试获得一个与 Autofac 一起使用的 Singleton 实例 我正在用 Winforms 做一个准 mvvm 类型的事情 只是一个实验 所以不要挂断它 但我正在尝试让我的模型成为单个实例 并在命令中引用 此处的 IComman
  • 如何使用Python套接字发送SIP消息

    我需要使用 Python 套接字发送 SIP 消息 我已经让客户端向服务器发送一些内容 但我无法让客户端向服务器发送 SIP 消息 INVITE usr bin python import socket R IP 192 168 2 1 R
  • 尝试读取在 Python 中创建的对象并传递到 C++ 端的 std::vector 然后返回到 Python 时出现访问冲突

    在 Windows 10 上使用 VS 2019 Python 3 7 64 位和 pybind11 2 4 3 时 我遇到了以下问题 当我使用 pybind11 创建对象时py class 在 Python 端并将其直接传递给 C 端的方
  • 使用 Jackson 将 json 转换为对象

    我必须使用 jackson 将 json 转换为对象 类是这样的 class Country int a int b 我得到的 json 是 country a 1 b 1 但是当我尝试反序列化它时 它给了我以下错误 org codehau
  • 如何获取使用 FileSystemWatcher 创建的新文件的名称?

    我正在使用 FileSystemWatcher 监视文件夹 如果我将文件下载到那里 如何获取该下载文件的名称 例如 如果我下载了一个名为 TextFile txt 的文件 我将如何让它以字符串形式返回该文件 我假设这适用于所有四个触发器 更
  • 将颜色属性从 xaml 绑定到 c#

    我正在尝试将自制控件的属性从我的视图绑定到我的视图模型 当我将颜色直接绑定到 xaml 中的另一个元素时 它可以工作 但是当我尝试将它绑定到我的视图模型中的属性时 财产没有变化 xaml