WPF自定义控件

我想建立一个新的自定义控件.我发现很少的教程给了我一些如何实现这一点的线索.据了解,创建新的自定义控件始终通过扩展当前的自定义控件来实现,甚至可以扩展
从层次结构的基本层次的控制,例如,你甚至可以扩展:

> UIElement
> FrameworkElement
>控制
> ContentControl
> HeaderedContentControl
> ItemsControl
>选择器
> RangeBase

如以下教程所写:http://wpftutorial.net/HowToCreateACustomControl.html

所以,我遵循了这个教程,并创建了一个新的自定义控件库项目,得到了我的通用.xaml和我的代码.到现在为止还挺好.

有3种类型的事件我可以区分.

>可以使用我的控件的窗口(或容器)消耗的事件:那些是我想要暴露给外部的事件.怎么写那些?
>与控制本身有关并且不在外部暴露的事件;
例如,如果鼠标在我的控制之下,我想反应
那个.我可以在XAML中做到这一点:

<ControlTemplate.Triggers>
  <Trigger Property="IsMouSEOver" Value="true">  
    <Setter Property="Fill" TargetName="LeftTraingularIndicator">  
      <Setter.Value>  
        <SolidColorBrush Color="Yellow" />  
      </Setter.Value>  
    </Setter>
  </Trigger>
</ControlTemplate.Triggers>

假设couse我有一个元素与填充属性在我的
ControlTemplate命名为x:name =“LeftTraingularIndicator”

问题:

现在我想在我的XAML对IsMouseDown做出反应.我怎么做?
没有“IsMouseDown”触发器.此外,如果我想要的话
在代码背后做出反应?更进一步如果我想要的
要将LeftTraingularIndicator“Fill”从代码改成后面?

>与视觉的一部分的子元素相关的事件
我的ControlTemplate的构造,如果我想反应如何
到XAML中的“LeftTraigularIndicator”的“IsMouSEOver”还是甚至在Code Behind中?
也许甚至两者.

我现在试图呆了2天…感觉我在理解事情的工作方面缺少一些东西.没有找到任何深入解释这些问题的教程.

我想看看我在这里出现的每个问题的几行示例.

谢谢.

解决方法

经过广泛的研究…

1)向外界公布事件
就好像你正在从任何其他类暴露出来.

public delegate void myDelegate(int someValue);  
public event myDelegate myEvent;

在你的代码的某个地方:

if(myEvent!=null)
  myEvent(5);

那部分没什么新鲜事

2)从后面的代码创建一个实例构造函数

public MyCustomControl()
{
    MouseMove += MyCustomControl_MouseMove;
}


void MyCustomControl_MouseMove(object sender,MouseEventArgs e)
{
   //Now you can react to the movement of the mouse.
   //if for example I want to address an element,let's say a rectangle:

   var ele = (Rectangle)Template.FindName("myRect",this);
   ele.Fill=myNewBrush;

   // provided that we have an element named "myRect" (x:name="myRect") in
   // the generic.xaml style->Control Template-> which corresponds to that name.

}

3)不推荐 – 因为它属于用户控件的范围而不是自定义控件.
自定义控件是“原子”,用户控件更适合于目的
组合控制.

但不是不可能

var myButton = (Button)Template.FindName("myButton",this);
myButton.OnMouseMove += ....

请记住:

>代码隐藏中应该知道的任何东西都必须命名.
>你的xaml应该不知道代码背后的做法. (除了! – 继续阅读)
>代码隐藏中应该知道的部分必须具有正确的名称
你设计你的XAML.

我真的希望这将有助于其他人在试图发展时获得“墙”自己的自定义控件.

c# – WPF自定义控件构造,触发器和事件的更多相关文章

  1. ios – Xcode Bot:如何在post触发器脚本上获得.ipa路径?

    我正在使用机器人来存档iOS应用程序,我需要获取.ipa产品路径才能将其发布到我们的分发系统中.机器人设置:并使用脚本打印所有env变量,其中不包含ipa文件的路径.此外,一些变量指向不存在的目录,即:XCS_OUTPUT_DIR这里的env变量输出:除此之外,我还能够确认.ipa文件是在另一个文件夹中创建的(/IntegrationAssets//

  2. android – 使用房间数据库(房间持久性库)创建触发器

    如何使用RoomPersistence库“创建触发器”解决方法在RoomDatabase上调用getopenHelper().这为您提供了一个SupportsqliteOpenHelper,它具有让人联想到sqliteOpenHelper的API.在那里,调用getWritableDatabase()以获取SupportsqliteDatabase,并在那里使用execsql()来执行您的sql语

  3. android – 使用SQLite触发器来更新“LastModified”字段

    即,触发器可以自动检测哪些表和行正被更新/插入/替换等.并通知设置该行的“last_modified”字段,或者我必须为每个表创建一个单独的触发器?或者如果触发器是一个坏主意,有没有更好的选择?谢谢.解决方法一个简短而甜美的答案给你:>之后,所以触发器有一个有效的表来引用.>您需要为您想要影响的每个表/列组合执行CREATETRIGGER.数据库不会假设,因为另一个表有一个last_modified列,你希望这个行为相同…

  4. 当XAML数据验证失败时,如何让视图模型知道

    我有一个表单,用户可以在其中设置数值过程的参数。尽管该属性是双精度的,但它可能表示布尔值或整数。我不能让Min>;Max或Max<;Min.我已经在XAML中实现了验证,如果数据无效,它会向用户发出视觉警告。Min参数的数据模板如下所示。我希望在参数对象中有一个布尔IsValid属性,以便在用户尝试保存时进行测试。如何从XAML绑定到此IsValid属性?

  5. wpf – 使用Microsoft(或其他)功能区与大型项目和MVVM

    我们是否应该有一个RibbonView和一个Ribbonviewmodel,它将包含功能区中的所有可能项目,每个团队都会将其项目添加到这些V/VM,并定义何时显示它们的逻辑?或者我们是否允许每个视图,视图模型或模块在服务中注册功能区项目,然后让服务在活动视图随注册到该类型的所有项目更改时根据需要呈现功能区?或者有没有更好的方法来实现这种集成?您是否对如何管理多个开发人员常见的单个功能区资源有更好的想法或意见?

  6. ScrollViewer中的WebView带有XAML元素头

    在WebView中,我使用WP8.1加载HTML元素.每当内容超出WebView高度时,滚动都没有问题.我的问题是我在WebView的顶部有XAML元素,它们必须与WebView滚动一起滚动.源代码:每当WebView元素“msgContent”滚动时,我都希望stackpanel“xamlelement”与WebView一起滚动.这里的问题是我们可以通过这2个步骤禁用webview滚动1)设置过度隐藏到加载到webview的html内容2)将webview的高度设置为等于其中加载的html内容.但是当我

  7. xaml – Windows通用响应式设计重新定位

    编辑:我使用一个包含2行和2列的Grid工作,使用AdaptiveTrigger将所有内容从行移动到列,反之亦然.可以通过setter更改RelativePanel附加属性值.语法如下:

  8. xaml – 空列表的列表框项模板

    我有一个列表框,其中包含在XAML中定义的项模板,如下所示:现在我想要的是在列表框的中心显示一行文本,以防该列表框的ItemSource为空.XAML是否支持某种无项目模板?

  9. 如何在WPF中将样式应用于Window Control?

    我正在为App.xaml中的Window设置样式,如下所示:我基本上希望每个Window都将其WindowStyle的属性值设置为None;但它没有用.我在这里想念的是什么?回答问题的人对从具有应用样式的基本窗口继承有一个有趣的想法.

  10. UWP(Windows 10)XAML中的WebBrowser控件

    你能告诉我如何在Windows10XAML中提供浏览器控件吗?

随机推荐

  1. c# – (wpf)Application.Current.Resources vs FindResource

    所以,我正在使用C#中的WPF创建一个GUI.它看起来像这样:它现在还没有完成.这两行是我尝试制作一种数据表,它们在XAML中是硬编码的.现在,我正在C#中实现添加新的水果按钮功能.我在XAML中有以下样式来控制行的背景图像应该是什么样子:因此,在代码中,我为每列col0,col1和col2创建一个图像,如果我使用以下代码,它添加了一个如下所示的新行:如你所见,它不太正确……为什么一个似乎忽略了一些属性而另一个没有?

  2. c# – 绑定DataGridTemplateColumn

    似乎我已经打了个墙,试图在DataGrid上使用DataTemplates.我想要做的是使用一个模板来显示每个单元格的两行文本.但是似乎无法以任何方式绑定列.以下代码希望显示我想做的事情.注意每个列的绑定:模板列没有这样的东西,因此,这个xaml不可能工作.我注定要将整个DataTemplate复制到每个列,只是对每个副本都有不同的约束?解决方法我不完全确定你想要做什么,但如果您需要获取整行的DataContext,可以使用RelativeSource绑定来移动视觉树.像这样:

  3. c# – 学习设计模式的资源

    最近我来到了这个设计模式的概念,并对此感到非常热情.你能建议一些帮助我深入设计模式的资源吗?

  4. c# – 是否有支持嵌入HTML页面的跨操作系统GUI框架?

    我想开发一个桌面应用程序来使用跨系统,是否有一个GUI框架,允许我为所有3个平台编写一次代码,并具有完全可脚本化的嵌入式Web组件?我需要它有一个API来在应用程序和网页之间进行交流.我知道C#,JavaScript和一些python.解决方法Qt有这样的事情QWebView.

  5. c# – 通过字符串在对象图中查找属性

    我试图使用任意字符串访问嵌套类结构的各个部分.给出以下(设计的)类:我想要从Person对象的一个实例的“PersonsAddress.HousePhone.Number”获取对象.目前我正在使用反思来做一些简单的递归查找,但是我希望有一些忍者有更好的想法.作为参考,这里是我开发的(crappy)方法:解决方法您可以简单地使用标准的.NETDataBinder.EvalMethod,像这样:

  6. c# – 文件下载后更新页面

    FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displaylang=en&pf=true它呈现该页面,然后使用以下元刷新标签来实际向用户提供要下载的文件:你可能需要在你的应用程序中做类似的事情.但是,如果您真的有兴趣在文件完全下载后执行某些操作,那么您的运气不佳,因为没有任何事件可以与浏览器进行通信.执行此操作的唯一方法是上传附件时使用的AJAXupload.

  7. c# – 如何在每个机器应用程序中实现单个实例?

    我必须限制我的.net4WPF应用程序,以便每台机器只能运行一次.请注意,我说每个机器,而不是每个会话.我使用一个简单的互斥体实现单实例应用程序,直到现在,但不幸的是,这样一个互斥是每个会话.有没有办法创建机器互连,还是有其他解决方案来实现每个机器应用程序的单个实例?

  8. c# – WCF和多个主机头

    我的雇主网站有多个主机名,都是同一个服务器,我们只是显示不同的皮肤来进行品牌宣传.不幸的是,在这种情况下,WCF似乎不能很好地工作.我试过overridingthedefaulthostwithacustomhostfactory.这不是一个可以接受的解决方案,因为它需要从所有主机工作,而不仅仅是1.我也看过thisblogpost,但是我无法让它工作,或者不是为了解决我的问题.我得到的错误是“这

  9. c# – ASP.NET MVC模型绑定与表单元素名称中的虚线

    我一直在搜索互联网,试图找到一种方式来容纳我的表单元素的破折号到ASP.NET的控制器在MVC2,3或甚至4中的默认模型绑定行为.作为一名前端开发人员,我更喜欢在我的CSS中使用camelCase或下划线进行破折号.在我的标记中,我想要做的是这样的:在控制器中,我会传入一个C#对象,看起来像这样:有没有办法通过一些正则表达式或其他行为来扩展Controller类来适应这种情况?我讨厌这样的事实,我必须这样做:甚至这个:思考?

  10. c# – 用户界面设计工具

    我正在寻找一个用户界面设计工具来显示文档中可能的GUI.我不能生成代码.我知道MicrosoftVisio提供了一个功能.但有什么办法吗?您使用哪种软件可视化GUI?

返回
顶部