我有一个usercontrol覆盖属性Text.但是这个属性在设计时没有显示.
如果我将其重命名为标题或值,它将在设计时显示在属性中,但不显示文本.
public Class SomeControl
Inherits System.Windows.Forms.UserControl
Public Overrides Property Text() As String
Get
Return lblText.Text
End Get
Set(ByVal value As String)
lblText.Text = value
End Set
End Property
End Class
Run Code Online (Sandbox Code Playgroud)
该怎么办?
事实上,UserControl缺少Window中的属性'SizeToContent'.
所以问题是:
在UserControl上模拟SizeToContent = WidthAndHeight行为的最简单正确的方法是什么?
UPD ...是的,我知道如果在你放置用户控件的容器中没有定义高度和宽度,它会自动获得.
但是当你将一个定义大小的userControl放入另一个没有大小的userControl时,它就不起作用,并且它们总是进入容器内部.
在这种情况下,你的第二个控件将占用它可以获得的所有空间.
在WinForms中,如何UserControl在我放置表单时创建一个,然后通过从工具箱中拖动它们来添加其他控件,就像所有容器控件(面板,组框等)一样?我试图通过将控制放在我的控制中来添加控件但是当我移动控件时我添加的控件保持在它们所在的位置,如果不是我的控制我会使用a Panel(其他控件会移动)与小组).
我有一个基本的UserControl设置它DataContext自己以便于绑定:
<UserControl x:Class="MyControlLib.ChildControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
</UserControl>
Run Code Online (Sandbox Code Playgroud)
这在父XAML文件中使用,如下所示:
<UserControl x:Class="MyControlLib.ParentControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ctrl="clr-namespace:MyControlLib">
<ctrl:ChildControl x:Name="ChildName"
PropertyOnChild="{Binding PropertyInParentContext}"/>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
由于某种原因,这给出了一个绑定错误,似乎表明DataContext父控件的设置受其自身的子控件设置的影响DataContext.
System.Windows.Data错误:40:BindingExpression路径错误:'object'''ChildControl'(Name ='ChildName')'上找不到'PropertyInParentContext'属性.BindingExpression:路径= PropertyInParentContext; DataItem ='ChildControl'(Name ='ChildName'); target元素是'ChildControl'(Name ='ChildName'); target属性是'PropertyOnChild'(输入'whatever')
为什么"PropertyInParentContext"在子控件中而不是在父控件中查找DataContext?
如果我删除了
DataContext="{Binding RelativeSource={RelativeSource Self}}
Run Code Online (Sandbox Code Playgroud)
从孩子控制,然后事情运作我期望.
我错过了一些明显的东西吗?
FastColoredTextbox是一个可以在此URL中下载的用户控件,它看起来像这样:

它是一个惊人的控件,但只能在双击文本时选择一个单词,不能按住鼠标选择更多的单词,所以它只选择鼠标指针上的整个当前单词,即使你试图将鼠标光标向左移动或者右边选择更多文字.
我没有找到解释问题的任何信息,所有官方示例项目都有这个问题.
没有人意味着如何为控件创建AutoWordSelection一个默认值,但即使最重要的是:TextBoxFastcoloredTextbox
如何用鼠标选择多个单词?
更新:
@ mostruash答案非常有启发性,但在这段时间里,我无法自己进行修改.
我需要C#程序员的大力帮助来完成这项任务,我对C#的了解非常少,而且我对源代码的修改不起作用(不编译),我回到原来的用户控件来源不会最终破坏更多.我讨厌这样说,但这次我需要完成这项工作,这个来源对我来说太过分了.
如果我要求太多,那么也许可以使用C#开发人员的必要扩展指令,解释如何一步一步地完成这个,也许我可以自己执行它.
UPDATE
一个解释问题的视频:
https://www.youtube.com/watch?v=Cs2Sh2tMvII
UPDATE
另一个演示,我展示了什么FastColoredTextBox 不能做,但我想像其他文本编辑器一样做:

我想将ASP.NET AJAX页面方法功能与用户控件一起使用.有没有办法能够在UserControl的代码后面指定我的静态[WebMethod]而不是后面的Page代码?
我创建了一个UserControl,它由一对椭圆和标签组成.我把它添加到另一种形式就好了,看起来很漂亮.
然后我开始添加一些事件处理程序,发现我所做的控件没有公开Click事件.哎呀.容易修复,对吧?回到我制作的UserControl上的代码隐藏,让它继承Button.
不幸的是,这样做会导致"MyControl的部分声明不能指定不同的基类"消息.这是一个惊喜,因为我没有声明任何其他基类.搜索有问题的部分也没有返回任何结果.
有没有办法打败这个问题?如果没有,这里最简单的解决方法是什么?我的目标只是在UserControl上获取Click事件.
我用javascript函数创建了ASP.NET用户控件:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestControl.ascx.cs" Inherits="BingTranslator.Web.WebUserControl1" %>
<script type="text/javascript">
function example() {
alert('<%=ExampleButton.ClientID%>');
return false;
}
</script>
<asp:Button ID="ExampleButton" runat="server" Text="Example"/>
Run Code Online (Sandbox Code Playgroud)
当用户将鼠标移动到按钮时,我想调用"example"函数,所以我为按钮添加了属性:
ExampleButton.Attributes.Add("onmouseover", "example()");
Run Code Online (Sandbox Code Playgroud)
它运作良好,但当我在同一页面上需要两个控件时,我遇到了问题.ASP.NET生成具有两个具有相同名称的函数的代码,这是错误的:
<script type="text/javascript">
function example() {
alert('TestControl1_ExampleButton');
return false;
}
</script>
<input type="submit" name="TestControl1$ExampleButton" value="Example" id="TestControl1_ExampleButton" onmouseover="example()" />
<script type="text/javascript">
function example() {
alert('TestControl2_ExampleButton');
return false;
}
</script>
<input type="submit" name="TestControl2$ExampleButton" value="Example" id="TestControl2_ExampleButton" onmouseover="example()" />
Run Code Online (Sandbox Code Playgroud)
并且任何按钮上的onmouseover事件总是会调用第二个函数.我可以通过将带有客户端ID的java脚本代码直接添加到attriburte onmouseover来解决此问题.
ExampleButton.Attributes.Add("onmouseover", "[Here will be javascript code]");
Run Code Online (Sandbox Code Playgroud)
但对我来说这不是一个非常和谐的解决方案.请告知,我如何才能更好地解决此类问题.
PS会有更多的Javascript代码,例如我添加了两个字符串upper.
我在自定义用户控件上进行数据绑定时遇到了困难.我创建了一个示例项目来突出我的问题.我是WPF的新手,也是MVVM的新手,所以请耐心等待......
我创建了一个使用数据绑定两种方式的简单视图.内置控件上的数据绑定工作正常.我的自定义控件没有...我在PropertyChangedCallback我的控件中放了一个断点.它在启动时被击中一次,但从未再次被击中.与此同时,我已经绑定到相同价值的标签很高兴倒计时.
我错过了什么?我的示例项目如下:
主窗口:
<Window x:Class="WpfMVVMApp.MainWindow"
xmlns:local="clr-namespace:WpfMVVMApp"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.DataContext>
<local:CountdownViewModel />
</Grid.DataContext>
<Label Name="custName" Content="{Binding Path=Countdown.ChargeTimeRemaining_Mins}" Height="45" VerticalAlignment="Top"></Label>
<local:UserControl1 MinutesRemaining="{Binding Path=Countdown.ChargeTimeRemaining_Mins}" Height="45"></local:UserControl1>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
这是我的模特:
namespace WpfMVVMApp
{
public class CountdownModel : INotifyPropertyChanged
{
private int chargeTimeRemaining_Mins;
public int ChargeTimeRemaining_Mins
{
get
{
return chargeTimeRemaining_Mins;
}
set
{
chargeTimeRemaining_Mins = value;
OnPropertyChanged("ChargeTimeRemaining_Mins");
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); …Run Code Online (Sandbox Code Playgroud) 我有一个Windows窗体,有一个窗格,其中包含从Windows窗体派生的另一个类.它包含在窗格中作为控件.它本身包含两个按钮.
我希望子控件的事件一直传递到父窗口.例如,窗格中的子窗口有一个Cancel按钮,应该关闭它.我想要父控件,即关闭主窗口,但是如何拦截子控件的按钮单击事件?
我可以修改子控件,但只有在没有其他方法以正确的方式实现这一点时,我宁愿避免它.
user-controls ×10
c# ×6
.net ×4
wpf ×4
winforms ×3
asp.net ×2
data-binding ×2
vb.net ×2
button ×1
controls ×1
datacontext ×1
javascript ×1
webforms ×1
xaml ×1