Tag: wpf

C#/ WPF – 获取ScrollViewer滚动位置?

好的,所以,每个人都知道如何设置ScrollViewer的滚动位置。 整篇论文和博客文章都是关于ScrollViewer.ScrollToVerticalOffset()编写的,这里有几百个关于它的答案。 所以,我输入: myScrollViewer.ScrollToVerticalOffset(280); ……它如此亲切地滚动到那个位置。 问题是, 什么属性现在包含280 ,所以我可以在以后检索它? (提示: myScrollViewer.VerticalOffset和ContentVerticalOffset都是0; myScrollViewer.ScrollInfo只是普通不存在。) 编辑:显然我需要更详细的演示。 private void btnTest_Click(object sender, RoutedEventArgs e) { double scrollTarget = 280; MessageBox.Show(“Target: ” + scrollTarget.ToString()); myScrollViewer.ScrollToVerticalOffset(scrollTarget); MessageBox.Show(“Now: ” + myScrollViewer.VerticalOffset); } 我必须重申,这确实按预期滚动 。 准确地向右移动到我想要的地方。 但是, myScrollViewer.VerticalOffset设置为0。

如何在WPF中处理Canvas.Top更改事件?

我在Canvas使用附加属性Canvas.Top和Canvas.Left定位了一个元素。 然后使用动画将元素移动到不同的坐标集,如下所示: DoubleAnimation left = new DoubleAnimation( oldLeft, newLeft ); DoubleAnimation top = new DoubleAnimation( oldTop, newTop ); element.BeginAnimation( Canvas.LeftProperty, left ); element.BeginAnimation( Canvas.TopProperty, top ); 有没有办法在Canvas.Top或Canvas.Left被更改时接收事件? 优选地与动画无关。

异步友好的DispatcherTimer包装器/子类

我在我的代码中运行一个DispatcherTimer ,每30秒触发一次,从服务器更新系统状态。 即使我正在调试我的服务器代码,计时器也会在客户端中触发,所以如果我已经调试了5分钟,我可能会在客户端中进行十几次超时。 最后决定我需要解决这个问题,以便制作一个更加async / await友好的DispatcherTimer。 在DispatcherTimer运行的代码必须是可配置的,无论它是否是可重入的(即,如果任务已在运行,则不应尝试再次运行它) 应该是基于任务的(这是否需要我实际上在根处公开Task是一个灰色区域) 应该能够运行异步代码并await任务完成 无论是包装还是扩展DispatcherTimer可能并不重要,但如果您不知道如何使用它,包装它可能会稍微不那么模糊 可能为UI的IsRunning公开可绑定属性

如何在WebBrowser控件中注入Javascript

这里有关于Windows窗体的很棒的教程 如何在WebBrowser控件中注入Javascript? 我尝试过它,效果很好 但问题是在wpf应用程序中无法识别所使用的对象。 所以我要问的是wpf应用程序中下面函数的等价物。 谢谢。 HtmlElement head = webBrowser1.Document.GetElementsByTagName(“head”)[0]; HtmlElement scriptEl = webBrowser1.Document.CreateElement(“script”); IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement; string srJquery = File.ReadAllText(“jquery.txt”); element.text = srJquery; head.AppendChild(scriptEl); 上面的函数在Windows窗体应用程序c#4.0中完美地工作,但是在WPF应用程序中无法识别HtmlElement等已使用的对象。

ObservableCollection比ObjectSet更好

为什么将ListBox绑定到在ObjectSet (来自entity framework)上创建的ObservableCollection而不是直接绑定到ObjectSet更好(在WPF,C#,Entity Framework中)? 还有一个问题:当我将ListBox绑定到ObservableCollection ,集合的任何添加都会更新ListBox 。 大。 但ObservableCollection是在ObjectContext (在Entity Framework中)创建的,并且向集合添加新项目不会将项目添加到上下文…如何解决这个问题????

附属物业变更事件?

如果附加属性发生变化,有没有办法获得变更通知? 一个简单的例子是一个带有Rectangle的Canvas 。 使用DepenendyProperties Canvas.Top和Canvas.Left设置Rectange的位置。 我正在使用Adorner通过更改Canvas.Top和Canvas.Left来移动Rectangle。 下一步是在两个Rectangles之间创建一个箭头。 为了跟踪移动的Rectangles ,只要Rectangle的位置发生变化,箭头就必须获得更改通知。 如果我可以在附加属性Canvas.Top更改时获得更改通知,这将很容易。 谢谢你的帮助,迈克尔

将canvas保存到位图

我想将我的canvas保存到位图。 我在互联网上找到了一些例子,但所有这些都只保存了黑色图像(我的canvas大小)。 我该怎么办? 码: public static void SaveCanvasToFile(Canvas surface, string filename) { Size size = new Size(surface.Width, surface.Height); surface.Measure(size); surface.Arrange(new Rect(size)); // Create a render bitmap and push the surface to it RenderTargetBitmap renderBitmap = new RenderTargetBitmap( (int)size.Width, (int)size.Height, 96d, 96d, PixelFormats.Pbgra32); renderBitmap.Render(surface); // Create a file stream for saving image using (FileStream outStream = […]

在UWP应用程序中使用WPF dll

我正在编写一个UWP应用程序,由于某种原因,我无法引用PresentationFramework.dll 。 它包含我想要使用的一些WPF控件(特别是System.Windows.Controls.DataGrid ,但它们在参考管理器中的Universal Windows >> Extensions下不可用。为什么会这样,我该如何修复它?

WPF MultiBinding失败。 为什么?

我有这个标记: 在后面的代码中我在window_loaded方法中有这一行: DataContext = uiManager; uiManager的类型为UIManager,它有两个名为IsConnected和IsLoggedIn的公共属性。 此代码在启动时失败,因为Multibinding调用的Converter中的values数组未填充布尔值,但值为DependencyProperty.UnsetValue。 当我使用下面的标记(并更改转换器的返回类型)时,它确实有效。 在第一个示例中,似乎通过后面代码中的DataContext的绑定集失败,但在第二个示例中工作。 为什么? 为了UIManager类下面的完整性: public class UIManager:IUIManager { #region Implementation of IUIManager private const string IsLoggedInProperty = “IsLoggedIn”; private bool loggedIn; private readonly object loggedInLock = new object(); public bool IsLoggedIn { get { lock (loggedInLock) { return loggedIn; } } set { lock (loggedInLock) { if(value==loggedIn)return; loggedIn […]

在WPF中启用最大化,最小化和还原窗口(禁用手动resize)

我需要在我的应用程序(C#WPF应用程序)上启用以下内容: 正常尺寸为1024 * 768 用户可以最大化应用程序 用户可以最小化应用程序 用户可以恢复应用程序(1024 * 768) 用户无法通过拖动边框手动调整应用程序的大小。 没有任何ResizeMode满足所有这些要求。 有什么办法吗?