如何限制TextBox仅接受大写字母,例如数字,或禁止放置任何特殊字符?
当然,抓住TextInput事件并在此处理文本是一块蛋糕,但这是否是正确的方法呢?
是否可以在WPF中使文本框自动完成?
我找到了一个示例,其中使用了一个组合框,并通过编辑样式模板删除了三角形.
有更好的解决方案吗?
我一直在阅读有关用户和自定义控件之间差异的一些解释,例如:http: //www.wpftutorial.net/CustomVsUserControl.html
例如,我想创建一个带有2个组合框的数据网格的简单组合,这些组合框负责更改数据网格项目的值.我想为此创建一个特定的控件,因为我将使用它很多次.我想实现后面的逻辑然后在xaml调用中我只需要指定itemsSource.
对于此示例,我应该创建用户控件还是自定义控件?由于我将拥有属性和逻辑,我应该有一个用于此控件的viewmodel吗?
编辑:你知道一些文章在这两个选项之间有明确的概念分离吗?
只是想知道如何将ContextMenu添加到DataGrid?我希望能够右键单击DataGrid上的任何位置.有人可以提供一个简单的hello world示例(只是弹出消息框或其他东西)?
谢谢!
我正在尝试将大型集合绑定到ComboBox,并且在打开ComboBox的弹出窗口时遇到了性能问题.我搜索了互联网,发现使用VirtualizingStackPanel作为项目面板模板可能有所帮助,但它只能帮助部分.如果我将一个大型集合绑定到一个ComboBox,我可以非常快速地打开弹出窗口,这没关系,但如果之后我将另一个集合绑定到一个ComboBox并尝试再次打开弹出窗口,它会变得非常慢.如果您为空ComboBox打开弹出窗口,然后绑定大型集合并尝试再次打开弹出窗口,则会发生同样的情况 - 弹出窗口打开前需要几秒钟.
这是XAML:
<ComboBox Name="cbBlah">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)
和绑定的示例代码重现问题:
var list = new List<string>();
for (var i = 0; i < new Random().Next(9000, 10000); i++)
list.Add(i.ToString());
cbBlah.ItemsSource = list;
Run Code Online (Sandbox Code Playgroud)
我试图使虚拟化堆栈面板看起来像这样:
<VirtualizingStackPanel VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling" />
Run Code Online (Sandbox Code Playgroud)
但它没有帮助,似乎忽略了VirtualizationMode,因此弹出窗口仅在第一次打开非常快,然后,每次绑定更改后,它都非常慢.
更新:我想过每次都没有绑定新的集合,但是绑定一次ObservableCollection然后只是改变它的内容.同样的事情,一旦收集内容发生变化,打开一个弹出窗口仍然需要几秒钟:(
是否可以在WPF控件资源中设置整数值?!
<UserControl.Resources>
<SolidColorBrush x:Key="MyLineBrush" Color="LightGreen" />
??? <Integer x:Key="MyStrokeThickness" Value="2" /> ???
<Style TargetType="local:MyLine" x:Key="MyLineStyleKey">
<Setter Property="Stroke"
Value="{DynamicResource MyLineBrush}"/>
<Setter Property="StrokeThickness"
Value="{DynamicResource MyStrokeThickness}"/>
</Style>
Run Code Online (Sandbox Code Playgroud)
为了动态修改MyLineBrush和MyStrokeThickness值......
我有一个用我的用户控件的窗口,我想使usercontrol宽度等于窗口宽度.怎么做?
用户控件是一个水平菜单,包含一个包含三列的网格:
<ColumnDefinition Name="LeftSideMenu" Width="433"/>
<ColumnDefinition Name="Middle" Width="*"/>
<ColumnDefinition Name="RightSideMenu" Width="90"/>
Run Code Online (Sandbox Code Playgroud)
这就是我想要窗口宽度的原因,将用户控件拉伸到100%宽度,第二列是相对的.
编辑:
我正在使用网格,有Window的代码:
<Window x:Class="TCI.Indexer.UI.Operacao"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:tci="clr-namespace:TCI.Indexer.UI.Controles"
Title=" " MinHeight="550" MinWidth="675" Loaded="Load" ResizeMode="NoResize" WindowStyle="None" WindowStartupLocation="CenterScreen" WindowState="Maximized" Focusable="True"
x:Name="windowOperacao">
<Canvas x:Name="canv">
<Grid>
<tci:Status x:Name="ucStatus"/> <!-- the control which I want to stretch in width -->
</Grid>
</Canvas>
</Window>
Run Code Online (Sandbox Code Playgroud) 我希望我Canvas自动调整大小到其项目的大小,以便ScrollViewer滚动条具有正确的范围.这可以在XAML中完成吗?
<ScrollViewer HorizontalScrollBarVisibility="Auto" x:Name="_scrollViewer">
<Grid x:Name ="_canvasGrid" Background="Yellow">
<Canvas x:Name="_canvas" HorizontalAlignment="Left" VerticalAlignment="Top" Background="Green"></Canvas>
<Line IsHitTestVisible="False" .../>
</Grid>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,画布的大小始终为0,但它不会剪切其子元素.
我需要在WPF中创建一个圆角的光泽按钮.有人可以解释一下我需要采取哪些步骤?
我怎样才能类型的子控件ComboBox中MyContainer Grid的WPF?
<Grid x:Name="MyContainer">
<Label Content="Name" Name="label1" />
<Label Content="State" Name="label2" />
<ComboBox Height="23" HorizontalAlignment="Left" Name="comboBox1"/>
<ComboBox Height="23" HorizontalAlignment="Left" Name="comboBox3" />
<ComboBox Height="23" HorizontalAlignment="Left" Name="comboBox4" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
这行给了我一个错误:
var myCombobox = this.MyContainer.Children.GetType(ComboBox);
Run Code Online (Sandbox Code Playgroud) wpf ×10
wpf-controls ×10
.net ×3
c# ×2
textbox ×2
autocomplete ×1
button ×1
combobox ×1
data-binding ×1
datagrid ×1
mask ×1
resize ×1
scrollviewer ×1
styles ×1
viewmodel ×1
xaml ×1