Tag: wpf

在WPF中获取可见的控件大小

我有一个没有完全显示的控件(通过减小窗口大小)。 但是此控件的ActualWidth和RenderSize / DesiredSize仍然显示它的总大小。 我编写了下一个代码,但它忽略了窗口的滚动条宽度并且看起来很难看。 也许有办法以更优雅的方式获得可见的控制尺寸? private static double GetVisibleWidth(UIElement element, FrameworkElement container) { var visibleBounds = element.TransformToAncestor(container) .TransformBounds(new Rect(new Point(0, 0), element.RenderSize)); double visibleWidth = element.RenderSize.Width; if (container != null) { visibleWidth = Math.Min(container.ActualWidth – visibleBounds.X, visibleWidth); } return visibleWidth; }

将boolean绑定到visualstate

我正在使用表达式混合,我想在列表框没有元素时将文本框的状态更改为红色边框和红色文本。 因此,当文本更改时,我会过滤列表框。 private void OnIPAddressTextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e) { compositeViewModel.manualServerInfoViewModel.FilterServers(IPAddressTextbox.Text); } 在我的viewmodel中,我过滤结果并检查是否有任何结果。 然后我相应地设置boolean属性 public bool HasResults { get; set; } public void FilterServers(string FilterCriteria) { …. HasResults = (FilteredManualServers.Count > 0)? true : false; } 在我的xaml中,当HasResults布尔值为false时,我尝试将文本框的State更改为带有红色边框的visualstate。 这是NoResult视觉状态 但是当项目数为空且布尔值为假时,没有任何反应。 我究竟做错了什么?

更改默认按钮突出显示WPF

我试图删除Button上的默认背景,但是当用户用鼠标hover在按钮上时,突出显示橙色的Button 。 这是我到目前为止所提出的; 但是,当用户将鼠标hover在按钮上时,它会以默认的蓝色突出显示,而不是我想要的橙色。 如何修改它以使Button的文本逐渐以橙色突出显示?

在WPF中延迟后重置变量的值

我有一些代码执行并获取执行的返回值。 我将此值设置为我的窗口的依赖项属性,因为有绑定到它的样式触发器。 当变量为0时,它使用默认样式,1表示偏红样式,2表示绿色。 但是我必须在一段时间后以某种实际的方式重置这种风格。 最简单的方法是什么? if (!Compiler.TryCompile(strText, Models[Model], EntryPoint.Text, out error)) { output.Items.Add(“Error compiling:”); output.Items.Add(error); CompilationStatus = 1; // dependency property bound on ui } else { output.Items.Add(“Compilation successful!”); CompilationStatus = 2; // dependency property bound on ui } // should execute this after 5 seconds CompilationStatus = 0; // dependency property bound on ui […]

MediaElement动画激活循环不会触发最后3个动画

在我的循环中,我的屏幕不会填充最后3个MediaElement 。 如果我扩展或缩小MediaElement数组…. MediaElement[] mygif = new MediaElement[30]; 从30个元素到40个元素,它将显示37个元素。 以下是此方法的完整源代码,如果您注意到第一个媒体元素被隐藏,则这是故意的。 private void LoadGifScreen() { Window GifBrowserCmd = new Window(); GifBrowserCmd.ShowInTaskbar = false; GifBrowserCmd.Width = 200; GifBrowserCmd.Height = screenHeight * .8; GifBrowserCmd.Left = screenWidth – GifBrowserCmd.Width; GifBrowserCmd.Top = screenHeight*.1; GifBrowserCmd.WindowStyle = System.Windows.WindowStyle.None; GifBrowserCmd.ResizeMode = System.Windows.ResizeMode.NoResize; GifBrowserCmd.Background = BaseColor; GifBrowserCmd.AllowsTransparency = true; GifBrowserCmd.Opacity = toolOpacity; MediaElement[] mygif […]

即使光标位于canvas之外,也会调用MouseMove事件

我不知道我的代码或WPF是否有问题,但问题是:我想创建一个小程序,你可以在canvas中用光标绘制。 我有一个简单的WPF窗口: 这是后台代码: private void StackPan_MouseDown(object sender, MouseButtonEventArgs e) { draw = true; } private void StackPan_MouseUp(object sender, MouseButtonEventArgs e) { draw = false; } private void StackPan_MouseMove(object sender, MouseEventArgs e) { if (draw) { var pos = Mouse.GetPosition(imageCanvas); Rectangle rec = new Rectangle() { Width = 10, Height = 10, Fill = Brushes.Red, }; […]

可编辑的WPF ListView

当用户双击某个项目时,我想使ListView可编辑。 我意识到网上有很多样本,但是,这些都是基于IsSelected属性,而不是处理双击事件。 任何想法或指针? 更新: 所以我遇到的另一个问题是,如何才能获得有问题的ListViewitem的数据模板中的ListViewitem ? 我迷路的地方是我需要进入控件的位置,根据是否正在编辑项目来启用或禁用控件。 目前, ListView数据模板如下所示: 引用的样式如下所示: BoolToVisibilityConverter是ListViewItem的IsSelected属性的转换器,然后确定ListViewItem的Visibility 。 从当前的XAML标记中可以看出,编辑控件将在项目选择时激活(变为可见),而不是项目双击。 更新2:到目前为止,所有建议只能使我解决方案的一半。 有没有人有一个可行的解决方案,如何访问我需要使可见/不可见的实际控件? 我会将答案标记为解决方案!

将文件类型图标保存在DATABASE或XML文件中

我正在使用c#,wpf和mvvm。 在我的datagrid中,每一行在最后一个单元格中都有一个ListBox,其中包含与此行相关的文档,我称之为句点。 用户可以向每个时段添加文档。 我想为每个文档显示文件类型图标(16×16)和文档名称。 文件类型图标让我有点头疼。 我不确定我是否应该在数据库中保存每个文件类型图标,如.DOC,因为一天可能有10个周期,每个都有2个.DOC文件,因此我在数据库中保存了20个图标,这些图标是19倍冗余… 我的用户将附加的大多数东西都是Office文件类型,如.xls,.doc,.pdf,images,zip / rar,我想这就是它。 另一个技术上更高级的是将唯一文件类型图标保存为XML文件中的编码base-64字符串,文件类型扩展名为键/值对。 在应用程序启动时,xml一次在字典中加载一次 每次文档进入数据库时​​,我都会检查文件名中的文件扩展名并检索字典以获取该文件的base64字符串。 我仍然可以以某种方式为文件类型base64字符串实现一个缓存机制,所以每次我得到.doc文件时我都不解码它们… 也许你有一个完全不同/更好的? 想法,请让我知道或建议数据库/ xml保存的优点/ disadvantes 🙂

WPF Groupbox高度需要动态变化吗?

我正在使用WPF中的groupbox,而groupbox的内部是一个stackpanel。 stackpanel具有已删除的项目,并已添加到其子项中。 我遇到的问题是组框内的Stackpanel正在改变高度,但GroupBox不是,因此它正在切断stackpanel中其余的添加项。 如何让groupbox将其高度调整到stackpanel的高度。 这必须在代码中完成,而不是在XAML中完成

如何根据ValidationRule类禁用按钮?

如何根据ValidationRule类禁用WPF按钮? (下面的代码可以很好地突出显示TextBox) XAML: ! C# public class ConfigValidationRule : ValidationRule { public ConfigValidationRule() { HasError = true; } public bool HasError { set; get; } public override ValidationResult Validate(object value, CultureInfo cultureInfo) { try { if (((string)value).Length > 0) { HasError = false; return new ValidationResult(true, null); } else { HasError = true; return new […]