我正在尝试在代码中设置WPF图像的源代码.图像作为资源嵌入到项目中.通过查看示例,我提出了以下代码.由于某种原因,它不起作用 - 图像不显示.
通过调试,我可以看到流包含图像数据.那有什么不对?
Assembly asm = Assembly.GetExecutingAssembly();
Stream iconStream = asm.GetManifestResourceStream("SomeImage.png");
PngBitmapDecoder iconDecoder = new PngBitmapDecoder(iconStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
ImageSource iconSource = iconDecoder.Frames[0];
_icon.Source = iconSource;
Run Code Online (Sandbox Code Playgroud)
图标的定义如下: <Image x:Name="_icon" Width="16" Height="16" />
您如何处理WPF应用程序中的数值输入?
没有NumericUpDown控件,我一直在使用TextBox并使用下面的代码处理它的PreviewKeyDown事件,但它非常难看.
有没有人发现更优雅的方式从用户那里获取数字数据而不依赖第三方控件?
private void NumericEditPreviewKeyDown(object sender, KeyEventArgs e)
{
bool isNumPadNumeric = (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) || e.Key == Key.Decimal;
bool isNumeric = (e.Key >= Key.D0 && e.Key <= Key.D9) || e.Key == Key.OemPeriod;
if ((isNumeric || isNumPadNumeric) && Keyboard.Modifiers != ModifierKeys.None)
{
e.Handled = true;
return;
}
bool isControl = ((Keyboard.Modifiers != ModifierKeys.None && Keyboard.Modifiers != ModifierKeys.Shift)
|| e.Key == Key.Back || e.Key == Key.Delete || e.Key == Key.Insert
|| e.Key == Key.Down || e.Key …Run Code Online (Sandbox Code Playgroud) 我创建了一个自定义控件继承TextBox.此自定义控件是数字TextBox,仅支持数字.
我OnPreviewTextInput用来检查每个键入的新字符,看看该字符是否是有效的输入.这非常有效.但是,如果我将文本粘贴到TextBox,OnPreviewTextInput则不会被触发.
捕获粘贴文本的最佳方法是TextBox什么?
此外,我在按下后退空间时遇到问题,我无法弄清楚这将触发什么事件.OnPreviewTextInput没被解雇!
有关如何在WPF中捕获粘贴文本和后台空间事件的任何想法TextBox?
我有一个wpf列表框,显示一个文本框列表.当我单击文本框时,列表框选择不会更改.我必须单击TextBox旁边的以选择列表框项.是否需要为Textbox设置一些属性以将click事件转发到Listbox?
任何人都有一个很好的例子如何深度克隆WPF对象,保留数据绑定?
明确的答案是第一部分.
第二部分是您必须创建一个ExpressionConverter并将其注入序列化过程.有关详细信息,请访问:http://www.codeproject.com/KB/WPF/xamlwriterandbinding.aspx?fid = 1428301&df = 90&mpp = 25&noise = 3&sort = Position&view = Quick&
select = 2801571
我有一个带有png的图像文件夹.我想将一个MenuItem的图标设置为该png.我如何在程序代码中写这个?
当用户右键单击我们的WPF应用程序并且他们使用Windows经典主题时,TextBox的默认ContextMenu(包含复制,剪切和粘贴)具有黑色背景.
我知道这很有效:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<TextBox ContextMenu="{x:Null}"/>
</Page>
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBox}">
<Setter Property="ContextMenu" Value="{x:Null}"/>
</Style>
</Page.Resources>
<TextBox/>
</Page>
Run Code Online (Sandbox Code Playgroud)
有谁知道如何为WPF中的所有TextBox设置样式或禁用默认的ContextMenu?
有趣的是,有时简单的事情会在后面咬我.
我可以使用像这样的DataGridTextColumn将DataGrid很好地绑定到某个任意类的Collection:
// bound to List<Class>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
Run Code Online (Sandbox Code Playgroud)
现在我想将DataGrid绑定到一个简单的String集合.因为没有属性"Name"或类似的东西要绑定,我该如何编写绑定:
// bound to List<String>
<DataGridTextColumn Header="Name" Binding="{Binding ???}"/>
Run Code Online (Sandbox Code Playgroud)
字符串没有属性"值"或类似的东西.如果我只是写{Binding},我将最终得到一个单向绑定,无法将更改写回Collection.
想一想,我认为不可能绑定到一个集合,所以我需要将我的字符串包装成一个类?
或者有办法吗?
在.NET 4.0中,Run.Text是可绑定的.所以我试着绑定它:
<Run Text="{Binding DisplayText}"/>
Run Code Online (Sandbox Code Playgroud)
但是当我运行时,我收到一个错误:"TwoWay或OneWayToSource绑定无法在'SomeNamespace.SomeClass'类型的只读属性'DisplayText'上工作."
我的DisplayText属性确实是只读的,但运行 - 运行也是如此,你无法编辑的TextBlocks.那么为什么我会收到这个错误?我用dotPeek挖掘了PresentationFramework,果然:
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof (string), typeof (Run),
(PropertyMetadata) new FrameworkPropertyMetadata((object) string.Empty,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
new PropertyChangedCallback(Run.OnTextPropertyChanged),
new CoerceValueCallback(Run.CoerceText)));
Run Code Online (Sandbox Code Playgroud)
第四行,简称为day,指定Run.Text默认情况下应绑定双向,这没有任何意义,似乎是一个明显的设计错误.
当然,这很容易解决:
<Run Text="{Binding DisplayText, Mode=OneWay}"/>
Run Code Online (Sandbox Code Playgroud)
但我为什么要必须解决它?为什么默认情况下Run绑定双向?
在MSDN文章" 了解WPF中的路由事件和命令"中,它说明了这一点
事件将从源元素向上冒泡(传播)可视树,直到它被处理或到达根元素.
但是,在此示例中,当您单击按钮时,它不会"冒泡可视树"以由父StackPanel事件处理,即单击按钮不会触发任何事件.
为什么不?如果不是这样的话,他们是什么意思"冒泡"?
XAML:
<Window x:Class="TestClickEvents456.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel x:Name="TheStackPanel"
Background="Yellow"
MouseDown="TheStackPanel_MouseDown">
<Button x:Name="TheButton"
Margin="10"
Content="Click This"/>
<TextBlock x:Name="TheMessage"
Text="Click the button or the yellow area"/>
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
后台代码:
using System.Windows;
using System.Windows.Input;
namespace TestClickEvents456
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void TheStackPanel_MouseDown(object sender, MouseButtonEventArgs e)
{
TheMessage.Text = "StackPanel was clicked.";
}
}
}
Run Code Online (Sandbox Code Playgroud)