Tag: wpf

wpf xaml绑定到后面的代码中创建的对象

刚开始我对C#和xaml很新。 我已经看过,检查了教程,关于绑定,但我见过的大部分都在xaml中创建了一个对象。 但是我想在代码中创建对象,然后绑定到它的属性。 此外,我将在稍后的代码中定义几个对象。 一般来说,我想绑定到文本框。 一般来说,我的代码看起来像这样: MainWindow.xaml.cs public partial class MainWindow : Window { MyTestObject myTestObject; public MainWindow() { myTestObject= new MyTestObject (); this.DataContext = this; InitializeComponent(); } } MyTestObject .cs class MyTestObject : INotifyPropertyChanged { public MyTestObject () { } private string testString = “Test”; public string TestString { get { return testString; } […]

如何通过WPF中的代码使动画更流畅?

我们如何做平滑的动画。 我有如下代码。 ThicknessAnimation anima = new ThicknessAnimation(new Thickness(0), new Thickness(0, 25, 0, 0), new Duration(new TimeSpan(0, 0, seconds)), FillBehavior.HoldEnd); pdRod.BeginAnimation(Border.MarginProperty, anima); 它的工作,但不够顺利。 怎么做顺利? 谢谢,

如何捕获(WPF)窗口之外发生的鼠标事件?

我有一个Window元素,其WindowStyle=”None”和AllowsTransparency=”True” ,因此它没有标题栏并支持透明度。 我希望用户能够通过左键单击窗口中的任意位置并拖动来将窗口移动到屏幕上的任何位置。 只要按下鼠标左键,窗口就会随鼠标一起拖动。 我能够使用这个function有一个例外:当鼠标移动到窗口之外时(例如当在窗口边缘按下鼠标左键并且鼠标移动时),窗口不再捕获鼠标位置,不随鼠标拖动。 以下是我用来完成工作的代码隐藏代码: public Point MouseDownPosition { get; set; } public Point MousePosition { get; set; } public bool MouseIsDown { get; set; } private void window_MyWindowName_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { MouseDownPosition = e.GetPosition(null); MouseIsDown = true; } private void window_MyWindowName_MouseMove(object sender, MouseEventArgs e) { if (MouseIsDown) { MousePosition = e.GetPosition(null); Left […]

如何根据字体颜色选择背景颜色以获得适当的对比度

我对颜色组成了解不多,所以我想出了这个算法,它会根据试验错误的字体颜色选择背景颜色: public class BackgroundFromForegroundColorConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (!(value is Color)) return value; Color color = (Color)value; if (color.R + color.G + color.B > 550) return new SolidColorBrush(Colors.Gray); else if (color.R + color.G + color.B > 400) return new SolidColorBrush(Colors.LightGray); else return new SolidColorBrush(Colors.White); […]

如何在C#WPF应用程序中使用CaptureMouse或Mouse.Capture?

我希望能够访问鼠标的坐标,无论光标是否在我的应用程序的窗口上。 当我使用Mouse.Capture(IInputElement)或UIElement.CaptureMouse()时,两者都无法捕获鼠标并返回false。 可能是我的问题? 我窗口的cs文件如下: using System.Windows; using System.Windows.Input; namespace ScreenLooker { /// /// Interaction logic for Window1.xaml /// public partial class Window1 : Window { public Window1() { InitializeComponent(); bool bSuccess = Mouse.Capture(this); bSuccess = this.CaptureMouse(); } protected override void OnMouseMove(MouseEventArgs e) { tbCoordX.Text = e.GetPosition(this).X.ToString(); tbCoordY.Text = e.GetPosition(this).Y.ToString(); //System.Drawing.Point oPoint = System.Windows.Forms.Cursor.Position; //tbCoordX.Text = […]

C#WPF BitmapSource内存泄漏?

我正在开发一个BlackJack程序,它显示了BlackJack表,卡片等。计划是它将通过自动化策略一个接一个地玩数千手牌。 我有一个PlayerSeat UserControl,它包含一个绑定到ObservableCollection的ItemsControl。 这个CardInHand类包含一个名为CardImage的BitmapSource。 当实例被装箱时,它使用以下代码从资源加载卡片图像: [System.Runtime.InteropServices.DllImport(“gdi32.dll”)] public static extern bool DeleteObject(IntPtr hObject); private BitmapSource GenerateCardImage() { Stream TempStream = this.GetType().Assembly.GetManifestResourceStream(“BlackJack.Resources.CardImages.Card_” + m_Card.ShortTitle + “.gif”); System.Drawing.Bitmap sourceBMP = new System.Drawing.Bitmap(TempStream); BitmapSource tempBitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( sourceBMP.GetHbitmap(), IntPtr.Zero, System.Windows.Int32Rect.Empty, BitmapSizeOptions.FromWidthAndHeight(sourceBMP.Width, sourceBMP.Height) ); TempStream.Dispose(); DeleteObject(sourceBMP.GetHbitmap()); return tempBitmapSource; } 问题是,在我运行~500轮(~4000手或~10000卡)后,我最终得到了GDI +错误,应用程序占用了大约400MB的RAM。 这种情况迅速增长,并且与已经玩过的牌数有关。 DeleteObject()是我在另一个站点上发现的,它说这是从Bitmap释放资源的最佳方式。 它可能会产生一些小影响,但不是我正在寻找的东西。 我也尝试过Dispose()。 另一个网站说它与ItemsSource绑定有关。 我删除了绑定,内存仍然增长。 反过来,我离开了绑定并删除了生成位图的代码。 它打了4万发子弹并且没有大幅度增长(在运行的40分钟内可能+ 20MB)。 […]

如何绑定只读WPF控件属性(例如ActualWidth),以便在视图模型中访问其值?

我想将控件的只读属性绑定到我的视图模型,以便该值在视图模型中可用。 这样做的最佳方式是什么? 例如,我想将ActualWidth绑定到视图模型中的属性。 宽度值由WPF使用其布局逻辑生成,因此我无法在视图模型中生成此值并将其推送到控件属性,这通常是这种情况。 相反,我需要让WPF生成值并将其推送到视图模型。 我只使用Mode=OneWayToSource ,但这不适用于只读属性: … child controls … 我现在这样做的方法是处理边框的SizeChanged ,然后代码将值插入到视图模型中,但这感觉不太对。 有人已经解决了这个问题吗? 更新:我的问题实际上是这个问题的重复:将只读GUI属性推回到ViewModel

双击WPF窗口边框上的事件

WPF窗口边框上的双击事件是否会触发任何事件? 我怎么能抓到它? 谢谢!

C#WPF解决方案独立性?

我正在使用C#在WPF中开发一个地图控件。 我正在使用canvas控件,例如400 x 200,其指定的地图区域为例如2,000mx 1,000m。 地图的比例为: canvas_size_in_meters / real_size_in_meters 。 我想找到canvas_size_in_meters。 canvas.ActualWidth给出DIU的宽度(设备独立单位)。 因此,400 DIU是400/96 = 4,17英寸, 提供我的显示器的物理分辨率为96 dpi。 但是,使用标尺,我发现我的显示器的物理分辨率是87 dpi。 (实际上只有少数显示器具有96个物理dpi) DPI差异(10%)转换为屏幕上实际地图控制宽度的+ 10%差异。 如何以英寸为单位测量WPF控件的大小,无论屏幕分辨率和DPI设置如何?

WPF用户控件中“DataContext = this”有什么问题?

我在某处读到在用户控件的构造函数中设置DataContext = this是不好的做法(虽然无法找到)。 为什么这是不好的做法? 有什么选择?