WPF中的事件Window.Loaded
和Window.ContentRendered
事件有什么区别?该ContentRendered
事件首先被召唤?
这里对Window.ContentRendered
事件的描述只是说
在窗口的内容呈现后发生.
的的描述Window.Loaded
事件在这里说,
元素布局,渲染并准备好进行交互时发生.
我有一个案例,我想将窗口设置MaxHeight
为显示我的窗口的屏幕的工作区域的高度.我应该参加哪个活动?
编辑:
我想我找到了我想要的东西,但现在我更加困惑了.该Loaded
事件首先发生,然后ContentRendered
事件发生.在Chris Sells和Ian Griffiths撰写的WPF编程一书中,它说Loaded
事件是
在窗口显示之前升起
虽然'ContentRendered`事件是
在窗口内容以可视方式呈现时引发.
这与MSDN文档中有关该Loaded
事件的内容相矛盾:
元素布局,渲染并准备好进行交互时发生.
现在这更令人困惑.
有谁知道如何在Postgres 9.1中找到表的OID?我正在编写一个更新脚本,需要在尝试创建列之前测试表中是否存在列.这是为了防止脚本在第一次出错后运行.
我有一个实现的类,IValueConverter
旨在用于将布尔值转换为Brush
.我正在尝试使用IValueConverter
绑定到Control 的BorderBrush
属性Border
:
<Window x:Class="DomPicker.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cc="clr-namespace:CustomControls;assembly=CustomControls"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
DataContext="{Binding Path=Domains, RelativeSource={RelativeSource Self}}"
Height="350"
Title="My Title"
Width="525">
<cc:CarSystemWindow.Resources>
<cc:BooleanToBrushConverter x:Key="BrushConverter" True="Black" False="Transparent" />
<DataTemplate x:Name="DomainTemplate" DataType="DomainViewModel">
<Border BorderBrush="{Binding Converter=BrushConverter, Path=IsSelected}">
. . .
</Border>
</DataTemplate>
</cc:CarSystemWindow.Resources>
<Grid>
<ListBox . . . Name="DomainListBox" />
</Grid>
<Window>
Run Code Online (Sandbox Code Playgroud)
以下是代码中的Domains属性的代码:
public static readonly DependencyProperty DomainsProperty =
DependencyProperty.Register( "Domains", typeof( ObservableCollection<DomainViewModel> ), typeof( MainWindow ), new PropertyMetadata( null ) );
public ObservableCollection<DomainViewModel> Domains {
get { …
Run Code Online (Sandbox Code Playgroud) 我的开发工作站正在运行VS2012 Update 1.操作系统是Windows 7 Professional Service Pack 1 x64.我有一台运行Windows 8的笔记本电脑,我安装了VS2012远程调试器.我已经开始使用msvsmon,它正静静地坐在系统托盘中,或者在Windows 8上传递它.
我在VS2012中设置了一个断点,我需要做一些调试.在VS2012中,我单击Debug | 附加到进程...我得到的对话框显示了我的机器上运行的进程列表.我将机器名称更改为笔记本电脑的名称.
我有两个不同的问题:
问题1:
运行Windows防火墙后,VS2012将连接到远程调试器服务器.我看到笔记本电脑上运行的进程列表.我选择了我要调试的那个,然后单击Attach.我得到"无法附加到进程.RPC服务器不可用."
这里发生了什么?
问题2:
我在桌面上关闭了Windows防火墙.当我尝试连接到笔记本电脑上运行的进程时,它会连接并加载所有符号.到现在为止还挺好.完成所有这些后,我执行的操作会导致我的断点被击中.远程计算机上的进程冻结,但VS2012也是如此.我坐在这里只要10分钟等待,没有任何变化.那时,我在远程机器上杀死msvsmon,我的程序随之消失,但VS仍然被锁定.
有任何想法吗??
当我运行Snoop 2.8时,它会看到我程序的主窗口并将其列在其中ComboBox
.但是,我的程序创建了一个通过调用显示的子窗口ChildWindow.Show()
.无论我做什么,我都无法窥探那个孩子的窗户.如果我刷新窗口列表,它不会显示.如果我将双筒望远镜旁边的小十字线图标拖到子窗口上,则会出现主窗口.
如何窥探应用程序的子窗口?
我的WPF应用程序中有一个DataGrid
控件.我有一个适合DataGridRow
该类的默认自定义样式.但是,对于这个DataGrid
特定屏幕上的这个特定,我需要一个不同的自定义样式.
每行中的Items都有一个bool
属性,设置后,我想显示具有不同前景色和背景色的行.但是,当选择行并且设置了该属性时,我想要一个不同的前景色和背景色来显示它已被选中并且该属性设置为true.
这是我尝试过的:
<Style TargetType="DataGridRow" x:Key="CameraStyle">
<Setter Property="Foreground" Value="{DynamicResource TextForeground}" />
<Setter Property="Background" Value="{DynamicResource DataBackground}" />
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Property="IsSelected" Value="False" />
<Condition Binding="{Binding Path=IsInLiveMode}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Foreground" Value="Red" />
<Setter Property="Background" Value="Yellow" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Property="IsSelected" Value="True" />
<Condition Binding="{Binding Path=IsInLiveMode}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="DarkOrange" />
<Setter Property="BorderBrush" Value="{DynamicResource DataBorder}" />
<Setter Property="Foreground" Value="DarkRed" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
这给了我一个"绑定必须是非null"错误,我认为这是因为Binding
MultiDataTrigger中的第一个条件没有属性.
在XAML中写这个的正确方法是什么?
编辑:
在尝试了nemesv和Rachel的答案后,代码现在编译并运行.但是,我为IsSelected …
我将我们产品的数据库从另一个支持Guids的产品移植到SQLite.众所周知,SQLite不支持Guids.我已经从我的数据库(数据库优先)创建了一个实体框架6模型,我需要从C#构建一个查询,将Guid与从代码传递的Guid进行比较.
问题是我找不到任何关于SQLite实体框架提供程序如何处理Guids的文档.网络搜索也找不到对我有用的东西.关于在SQLite中使用Entity Framework的问题.
任何人都可以指向我的文档,或者告诉我如何通过EF6模型在SQLite数据库中使用Guids?
c# sqlite entity-framework system.data.sqlite entity-framework-6
我的WPF应用程序在我的两台显示器笔记本电脑开发系统上表现出奇怪的行为 第二台显示器的分辨率为1920 x 1080; 笔记本电脑的分辨率为1366 x 768.笔记本电脑运行的是Windows 8.1,两台显示器的DPI设置都设置为100%.插入后,第二个显示器是主显示器.显然,当未插入第二台显示器时,笔记本电脑的显示屏是主显示屏.
应用程序窗口始终最大化,但可以最小化.它无法拖动问题与当您将第二个显示器插入或拔出时将窗口从一个显示器移动到另一个显示器时的显示方式有关.
当插入第二台显示器启动程序时,它会在拔下插头时移动到笔记本电脑的显示屏上.WPF代码也正确处理此更改.也就是说,它检测到原始大小不适合新显示器,因此重绘它以适应.当第二个显示器重新插入时,它会移回第二个显示器并以适合该显示器的大小重新绘制.这正是我在这种情况下想要的.问题是程序在其他配置中启动时.
在没有插入第二台显示器的情况下启动程序时,将以适当大小绘制笔记本电脑的显示屏.在程序运行时插入第二台显示器时,窗口移动到第二台显示器,但绘制错误.由于程序最大化,它的三面都有一个巨大的黑色边框,内容显示在与笔记本电脑显示屏上相同的区域.
编辑: 我刚刚完成了一些测试,WPF似乎无法正确处理从较小分辨率到较高分辨率的分辨率变化.窗口的行为与我在笔记本电脑的显示器上启动程序然后插入第二台显示器时的行为相同.至少它是一致的.
我发现通过处理SystemEvents.DisplaySettingsChanged
事件,我可以获得插入第二台显示器的时间或屏幕分辨率更改的通知.在我的测试中,我发现,当窗口从较小的显示屏较大的一个动作,即Width
,Height
,ActualWidth
,和ActualHeight
是不变的,当窗口移动到更大的窗口.我已经能够做的最好的是让Height
与Width
性能相匹配的显示器的工作区,价值观,但ActualWidth
和ActualHeight
性质不会改变.
如何强制窗口处理我的问题案例,就好像它只是一个分辨率更改?或者说,如何强制窗口的改变ActualWidth
和ActualHeight
性能,以正确的价值观?
窗口来自我写的一个名为DpiAwareWindow的类:
public class DpiAwareWindow : Window {
private const int LOGPIXELSX = 88;
private const int LOGPIXELSY = 90;
private const int MONITOR_DEFAULTTONEAREST = 0x00000002;
protected enum MonitorDpiType {
MDT_Effective_DPI = 0,
MDT_Angular_DPI = 1,
MDT_Raw_DPI = 2,
MDT_Default = MDT_Effective_DPI
}
public …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,我已经为它创建了许多单元测试.具有测试类的项目取决于3个第三方DLL.当我转到测试项目的bin\Debug文件夹时,Dll就在那里.但是当我运行测试时,DLL没有被复制到TestResult \\ Out文件夹中.
还有一个我希望复制的另一个项目的log4net.config文件.这个没有出现在测试项目的bin\Debug文件夹中,所以这是我必须解决的另一个问题.
运行单元测试时如何将这些文件复制?
托尼
在WPF中,您可以创建一个Style
充当XAML中控件类型的默认值:
<Style TargetType="{x:Type local:MyControl}">
. . .
</Style>
Run Code Online (Sandbox Code Playgroud)
然后,当WPF显示该控件时,它会Style
根据其类型从资源中查找该控件.
我想在我的程序的代码隐藏中做相同的操作.我怎么找到的Style
?