Articles of wpf

为最大化的WPF自定义窗口删除DropShadow

我有一个自定义窗口边框的WPF应用程序(.NET Framework 4)。 我已经禁用使用WPF壳集成库的玻璃边框,并绘制我自己的边框。 但是,我想添加一个DropShadow的时候没有最大化的窗口边界。 我已经添加了这样的阴影: private static bool DropShadow(Window window) { try { WindowInteropHelper helper = new WindowInteropHelper(window); int val = 2; int ret1 = DwmSetWindowAttribute(helper.Handle, 2, ref val, 4); if (ret1 == 0) { Margins m = new Margins { Bottom = 0, Left = 0, Right = 0, Top = 0 }; […]

WPF相当于Application.AddMessageFilter(Windows窗体)

我在我的WinForms应用程序(使用非托pipe代码时)使用Application.AddMessageFilter() )。 现在我切换到WPF ,无法find这个function。 请咨询哪里可以find或实施。

Snoop没有看到我的应用程序的子窗口

当我运行Snoop 2.8时,它会看到我的程序的主窗口并将其列在ComboBox 。 但是,我的程序创build一个通过调用ChildWindow.Show()显示的子窗口。 不pipe我做什么,我都无法窥探那个孩子的窗口。 如果我刷新窗口列表,它不显示。 如果我在子窗口上拖动望远镜旁边的小十字头发图标,主窗口就会出现。 我如何窥探我的应用程序的子窗口?

在Linux上编译C#+ WPF以便在Windows上运行

我有一个C#应用程序,其中一些部分是使用WPF(Mono不支持)编写的。 有没有可能在Linux上编译这个应用程序? 最终,应用程序将在Windows上运行,但它是一个更大的框架的一部分,我们的整个构build过程运行在Linux上,所以我希望能够在Linux上编译C#应用程序。

最小化WPF中的窗口?

如何在使用Windows WPF时以编程方式最小化窗口? 我似乎可以find.Resize属性?

WPF RibbonWindow + Ribbon =标题外屏?

我正在试用Ribbon控制与RibbonWindow结合使用,但是即使在微不足道的实验中也是如此。 创build了新的WPF应用程序 将代码更改为MSDN中的示例 添加了对System.Windows.Controls.Ribbon引用,并删除了ribbon:前缀(为什么示例过时?)。 增加了两个图标(16×16和32×32)。 执行了应用程序,看到了这个(记事本供参考): 我已经可以看到很多问题了: 边界很小。 一个正常的窗口有一个大的边框,WPF Ribbon应用程序很小。 标题高度也较小。 边框模糊。 当一个正常的窗口被聚焦时,它的边界是黑色的。 WPF应用程序的边框是灰色的(黑色可以在angular落看到;有东西是在边界上绘制的)。 应用程序图标放错了位置。 它粘在左上angular。 应用程序标题错位。 它粘在顶部。 让我们把工具栏移到底部。 现在我们看到这个: button在工具栏之外。 最后,让我们最大化的窗口: 一半的标题消失在屏幕之外(技术上,窗口在屏幕的外侧每边8像素,但其他应用程序不会被这个混淆)。 我正在使用Windows 7,Aero,单个显示器,没有什么特别的。 我害怕在Windows 8上testing应用程序… 有什么机会解决这个问题?

Environment.SpecialFolder.ApplicationData返回错误的文件夹

我有一个奇怪的问题:我的.NET 4.0 WPF应用程序正在将数据保存到ApplicationData文件夹。 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\myProgram\\"; 99.9%的案例工作得很好,但在一些电脑上,它返回错误的文件夹 – 而不是返回用户文件夹它返回另一个文件夹: C:\Users\<user>\AppData\Roaming\myProgram\ –correct C:\Users\s\AppData\Roaming\myProgram\ –wrong 错误的文件夹没有写/读权限,所以我的程序无法正常工作。 看来程序运行在不同的用户下,但是如果我检查任务pipe理器,用户是已login的用户。 问题似乎发生在域用户权限很less的情况下。

我如何使用正确的Windows系统颜色?

我想使用XAML来设置WPFbutton的样式,使其看起来像这些Windows 7通知区域popup窗口的“混音器”和“更改date和时间设置…”文本。 SystemColors属性是否定义了该颜色? 哪一个? <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.????}}" />

如何在WPF应用程序中设置TextBlock和Label的默认颜色,字体系列和字体大小?

编辑:我想这个问题没有说得很清楚。 它实际上由四个独立的组成: 如果客户端应用程序没有提供任何样式,或者以编程方式或通过xaml, TextBlock如何获得其默认颜色? Label如何获得其默认颜色? 如果客户端应用程序不提供任何样式,或者以编程方式或通过xaml, TextBlock如何获得其默认字体大小和字体系列? Label如何获得其默认的字体大小和字体系列? 顺便说一句,这些问题不是关于如何改变或定义TextBlock或Label的颜色/字体大小/字体族的样式,尽pipe它们在某种程度上是相关的。 我想我已经知道#2的答案,那就是一个Label从SystemColors.ControlTextBrushKey中获取它的颜色,并通过重写ConrolTextBrushKey如下所示: <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Red"/> 您将能够“全局”更改Label的颜色。 经过一番研究之后,我想我也可以find#1的答案: TextBlock从其包含的Windowinheritance前景色,默认从SystemColors.WindowTextBrushKey获取Foreground 。 通过为WindowTextBrush定义颜色,如下所示: <Window.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.WindowTextBrushKey}" Color="Yellow"/> </Window.Resources> 您将能够更改Window内TextBlock的“前景”颜色。 问题#3和#4对我来说仍然是困惑,但我假设他们必须做SystemFonts 。 希望这是有道理的。 我真的很想知道答案,因为他们一直在困扰我。 非常感谢! 以下是原文: 如果您查看Windows附带的主题(例如“aero.normalcolor.xaml”)中Label的样式,则可以查找 <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 其中设置Label的颜色。 但是在style中没有指定FontSize属性,我认为这与SystemFonts有关 。 对于TextBlock ,它看起来更加神秘,因为“aero.normalcolor.xaml”中的样式只有4行: <Style x:Key="{x:Type TextBlock}" TargetType="{x:Type TextBlock}"> <Setter Property="TextWrapping" Value="NoWrap"/> <Setter Property="TextTrimming" Value="None"/> </Style> […]

释放在WPF中创build的命名互斥体Application.OnStartUp():哪个线程拥有它?

我在WPF应用程序的OnStartup方法中创build一个互斥体。 该程序中没有使用互斥锁,它的唯一目的是防止某些程序同时运行。 如何在应用程序closures时释放此互斥锁? 根据文档 , mutex.ReleaseMutex()必须从创build互斥体的同一线程调用。 然而,这提出了一个问题,因为我不控制调用OnStartup()的线程。 假设我的OnStartup方法如下所示: public partial class App : Application { private Mutex mutex; private bool hasHandle = false; protected override void OnStartup(StartupEventArgs e) { bool createdNew; mutex = new Mutex(false, @"Global\XYZ", out createdNew); try { hasHandle = mutex.WaitOne(5000, false); if (!hasHandle) {/*do stuff*/}; } catch (AbandonedMutexException) { hasHandle = true; […]