窗口里有两个Grid 叫A和B A中某按钮的click事件的作用是使得B中某个按钮的背景颜色改变。我自己的想象中应该是个有一个将B中的button跟A中连起来的一行代码,然后button.background再去变。
不知道是不是这样?
如果是,麻烦告知应该是怎样的一行代码。
如果不是 还请指教怎么去改。wpf
不知道是不是这样?
如果是,麻烦告知应该是怎样的一行代码。
如果不是 还请指教怎么去改。wpf
<Button x:Name="B" Background="Red" Content="B"/>
在buttonA里面click的后台代码里直接写
private void A_Click(object sender, RoutedEventArgs e)
{
B.Background = Brushes.Blue;//或者new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ff555555"))
}
要是Button B 在另一个窗口的区域里 button的名字就会有重复吧。默认命名不都是button1 button2之类的吗。 那还能不能让button B变色呢?
要是Button B 在另一个窗口的区域里 button的名字就会有重复吧。默认命名不都是button1 button2之类的吗。 那还能不能让button B变色呢? 不在同一个窗口 你需要抛事件 然后再另外一个窗口监听
在事件处理函数里面写把button换颜色的代码
还有或者你在a窗口里面搞个b窗口的引用
然后调用b里面的方法 让b里面的button换颜色
要是Button B 在另一个窗口的区域里 button的名字就会有重复吧。默认命名不都是button1 button2之类的吗。 那还能不能让button B变色呢? 不在同一个窗口 你需要抛事件 然后再另外一个窗口监听
在事件处理函数里面写把button换颜色的代码
还有或者你在a窗口里面搞个b窗口的引用
然后调用b里面的方法 让b里面的button换颜色好高深,写b里的变色方法我会,引用应该是个什么样子的?
b.你变色的方法 在A里面就直接执行就行了
懂了吧 和普通类直接的调用一样
明白了 我这就去写写看 我按着你说的试了下 给你看看……B窗口中的变色方法
public void ButtonBS ()
{
button1.Background = Brushes.White;
button2.Background = Brushes.LightBlue;
}A窗口中的引用
private void Hyperlink_Click(object sender, RoutedEventArgs e)
{
Window2 win2 = new Window2();
win2.ButtonBS();
}我这么写没见有变化,也不报错 是不是哪里出问题了?
新手求详细点……你上网搜C#委托,很多的。this.invoke{form2.textbox.text="1";}
明白了 我这就去写写看 我按着你说的试了下 给你看看……B窗口中的变色方法
public void ButtonBS ()
{
button1.Background = Brushes.White;
button2.Background = Brushes.LightBlue;
}A窗口中的引用
private void Hyperlink_Click(object sender, RoutedEventArgs e)
{
Window2 win2 = new Window2();
win2.ButtonBS();
}我这么写没见有变化,也不报错 是不是哪里出问题了?你期待什么变化?
本质上你根本没有理解我的意思
给你描述一下场景吧 代码就不写了 自己动手吧首先你有个main的程序
里面new出来两个window a b(都执行下show方法就把两个window都show出来)
然后你吧b当做个变量传给a a中有个property是bwindow类型的
然后你在a里面直接操作b就行了呗
你new一个window 也不show出来
怎么看b啊?
发现你思路有点混乱。
乱扯。就是个简单的窗体传值 或者事件
怎么就往委托上扯呢 呵呵
你如果说mvvm直接改vm里的数据 自动跟新 我到觉得你是个稍微懂行的
上来就直接扯委托。。就不要误人子弟了 哈哈
乱扯。就是个简单的窗体传值 或者事件
怎么就往委托上扯呢 呵呵
你如果说mvvm直接改vm里的数据 自动跟新 我到觉得你是个稍微懂行的
上来就直接扯委托。。就不要误人子弟了 哈哈
我感觉楼主是说两个窗体都打开了,然后点击A窗口的Button去触发B窗口的事件。
乱扯。就是个简单的窗体传值 或者事件
怎么就往委托上扯呢 呵呵
你如果说mvvm直接改vm里的数据 自动跟新 我到觉得你是个稍微懂行的
上来就直接扯委托。。就不要误人子弟了 哈哈
我感觉楼主是说两个窗体都打开了,然后点击A窗口的Button去触发B窗口的事件。嗯,是这么个想法……
public MainWindow()
{
InitializeComponent();
} private void Button_Click(object sender, RoutedEventArgs e)
{
b = new B();
b.Show();
}
//这里触发事件直接调用B就可以了
private void ButtonA_Click(object sender, RoutedEventArgs e)
{
b.buttonB.Background = new
LinearGradientBrush(Colors.Yellow,Colors.LightBlue,20);
}
{
InitializeComponent();
}
public void changeButtonColor()
{
button1.BackColor = Color.Blue;
}
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
Form2 f = new Form2();
f.changeButtonColor();
f.Show(); }直接这样可以,因为这个实际是在form2里面改得。不是直接在form1里面改
那什么样才算是在form1里面改的?
我之前理解的是把B窗口先打开,再在A窗口里面点一下Button去改变B窗口的Button颜色
首先17楼得做法是完全不正确 而且会引来n多问题的
虽然你可以这样直接去修改b窗口的背景颜色 甚至可以去handel按钮的事件
但是 你这样却破坏了b的封装性 而且其他项目不知道 wpf项目 混淆加密代码的时候会遇到问题这样写
其次说说正确的做法
1.调用b中public方法的方式 在b窗口里面写个public函数的接口给外面调用 不要直接操作b中的button
2.采用事件机制 在b中keep一个a的引用 然后a的button点击后抛事件 然b去handel
3.采用mvvm模式 直接去改b的vm里面的数据即可 界面自动更新
这三种方式是我一般会采用的方式
当然 这都是比较入门和基础的知识
还有就是对于多线程或者异步调用 需要注意 只有主线程可以操作ui对象 需要使用dispatcher
否则会报错说没有线程access权限拿个分我容易么我..........................
首先17楼得做法是完全不正确 而且会引来n多问题的
虽然你可以这样直接去修改b窗口的背景颜色 甚至可以去handel按钮的事件
但是 你这样却破坏了b的封装性 而且其他项目不知道 wpf项目 混淆加密代码的时候会遇到问题这样写
其次说说正确的做法
1.调用b中public方法的方式 在b窗口里面写个public函数的接口给外面调用 不要直接操作b中的button
2.采用事件机制 在b中keep一个a的引用 然后a的button点击后抛事件 然b去handel
3.采用mvvm模式 直接去改b的vm里面的数据即可 界面自动更新
这三种方式是我一般会采用的方式
当然 这都是比较入门和基础的知识
还有就是对于多线程或者异步调用 需要注意 只有主线程可以操作ui对象 需要使用dispatcher
否则会报错说没有线程access权限拿个分我容易么我..........................
是变色了,还小激动了一下。
但f.Show();之后,是重新出来一个form2,那如果两个form本身就同时存在,点击后直接修改form2而不是重新出来一个,应该如何处理呢
public Form1()
{
InitializeComponent();
f.Show();
}
private void button1_Click(object sender, EventArgs e)
{
f.changeButtonColor();
}
。net里面的Action啊 事件啊 其实都是委托
比如让你自己写个类似menu的控件 用户可以指定任意多个item和item所执行的方法(类似右键菜单)
你不可能写死每个条目所需要执行的函数
所以可以用委托 达到动态执行不同函数的效果
。net里面的Action啊 事件啊 其实都是委托
比如让你自己写个类似menu的控件 用户可以指定任意多个item和item所执行的方法(类似右键菜单)
你不可能写死每个条目所需要执行的函数
所以可以用委托 达到动态执行不同函数的效果
- - 我就是昨天加你Q的那个 前面的都得是新弹一个窗口变色,我又有点表述不清楚,所以还麻烦有空私聊
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestApp"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<local:PartA x:Name="PartAInstance"/>
<StackPanel Grid.Column="1">
<Button x:Name="BtnA" Content="Step A" Width="90" Height="30"/>
<Button x:Name="BtnB" Content="Step B" Width="90" Height="30"/>
<Button x:Name="BtnC" Content="Step C" Width="90" Height="30"/>
</StackPanel>
</Grid>
</Window>
namespace TestApp
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.PartAInstance.StepAEvent += new EventHandler<EventArgs>(PartAInstance_StepAEvent);
this.PartAInstance.StepBEvent += new EventHandler<EventArgs>(PartAInstance_StepBEvent);
this.PartAInstance.StepCEvent+=new EventHandler<EventArgs>(PartAInstance_StepCEvent);
} void PartAInstance_StepCEvent(object sender, EventArgs e)
{
BtnA.Background = Brushes.Blue;
BtnB.Background = Brushes.Blue;
this.BtnC.Background = Brushes.Red;
} void PartAInstance_StepBEvent(object sender, EventArgs e)
{
BtnA.Background = Brushes.Blue;
BtnC.Background = Brushes.Blue;
BtnB.Background = Brushes.Red;
} void PartAInstance_StepAEvent(object sender, EventArgs e)
{
BtnC.Background = Brushes.Blue;
BtnB.Background = Brushes.Blue;
BtnA.Background = Brushes.Red;
}
}
}
<UserControl x:Class="TestApp.PartA"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/up-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel>
<Button Content="Step A" Click="ButtonA_Click"/>
<Button Content="Step B" Click="ButtonB_Click"/>
<Button Content="Step C" Click="ButtonC_Click"/>
</StackPanel>
</UserControl>namespace TestApp
{
/// <summary>
/// Interaction logic for PartA.xaml
/// </summary>
public partial class PartA : UserControl
{
public event EventHandler<EventArgs> StepAEvent;
public event EventHandler<EventArgs> StepBEvent;
public event EventHandler<EventArgs> StepCEvent;
public PartA()
{
InitializeComponent();
} private void ButtonA_Click(object sender, RoutedEventArgs e)
{
if (this.StepAEvent != null)
this.StepAEvent(this, new EventArgs());
} private void ButtonB_Click(object sender, RoutedEventArgs e)
{
if (this.StepBEvent != null)
this.StepBEvent(this, new EventArgs());
}
private void ButtonC_Click(object sender, RoutedEventArgs e)
{
if (this.StepCEvent != null)
this.StepCEvent(this, new EventArgs());
}
}
}