根据WindowStartupLocation属性的MSDN文档: 设置CenterScreen会使窗口位于包含鼠标光标的屏幕中央。 虽然CenterScreen字段的MSDN文档本身将其定义为: 窗口的启动位置是打开窗口的中心。 一个简单的testing显示这个工作应该是这样的: MainWindow.xaml <Window x:Class="CenterScreenTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Button Click="button_Click">Open Window</Button> </Window> MainWindow.xaml.cs using System.Windows; namespace CenterScreenTest { public partial class MainWindow { public MainWindow() { InitializeComponent(); } void button_Click(object sender, RoutedEventArgs e) { Window window = new Window(); window.WindowStartupLocation = WindowStartupLocation.CenterScreen; window.Show(); } } } 如果您在双显示器系统上进行testing,则可以看到当您单击button时,新窗口将居中在鼠标光标所在的屏幕上。 这正是它应该如何工作。 但是 ,如果您在显示窗口之前尝试将窗口设置为最大化,那么新窗口只会在启动应用程序的显示器上最大化。 将button_Click事件处理程序更改为以下内容以查看我的意思: void button_Click(object […]
我的项目缺lessSystem.Windows.Interactivity 。 谷歌说,我必须安装Expression Blend,但在我的其他电脑上,我有这个库,我没有安装Expression Blend。 那么应该有另一种方法来获取System.Windows.Interactivity ? 我该怎么办? (现在我没有另一台电脑,所以我不能只是复制这个图书馆:)
我有一个Outlook 2013和2016 VSTO外接项目,并试图将WPF用户控件添加到自定义任务窗格中,如此处所述。 我遇到的问题是,当我添加用户控件(WPF)时,它会生成一个带有网格的WPF控件,但会自动抛出“types”UserControl“不支持直接内容”的错误。 WPF生成: <UserControl x:Class="TestNamespace.UserControl1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:TestNamespace" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"> <Grid> </Grid> </UserControl> 我知道在过去,我不得不将WPF项目typesguid添加到.proj文件,以获得一些工作,但添加这没有什么区别(事实上,它甚至不会按照特定顺序加载)。 原版的: <ProjectTypeGuids>{BAA0C2D2-18E2-41B9-852F-F413020CAA33};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> 崩溃: <ProjectTypeGuids>{BAA0C2D2-18E2-41B9-852F-F413020CAA33};{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> 不会崩溃,但不会修复错误: <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{BAA0C2D2-18E2-41B9-852F-F413020CAA33};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> 任何人都可以指向正确的方向吗? UPDATE 我试图直接创build一个新的类库项目,添加一个WPF用户控件,然后添加到System.Xaml的引用,我有同样的问题。
我们正在开始一个新的项目,我正在试图决定我们应该采取哪种Wpf-esque开发/部署策略。 在我们的例子中,我们正在看一个相当复杂的商业应用程序,将被100人(而不是1000人)使用,所以我倾向于一次点击一次的应用程序。 我的老板喜欢Silverlight应用程序的想法,因为这意味着更容易部署。 那么我们应该跳哪一条路? 答案当然是“要看情况”。 那么每个人的利弊是什么? 我会开始球滚动( 编辑添加在一些答案从artur carvalho ): Silverlight的 优点 跨浏览器 不需要完整的框架。 更好地控制用户。 如果你的用户login,你不必担心激活密钥或类似的东西。 它适用于Windows和Mac。 您可以轻松更新所有的用户应用程序。 缺点 不能与客户端的文件系统等进行交互 与完整的Wpf相比,function更less(任何人都有一个很好的文档差异资源?) 单个窗口 单一版本 Wpf Web应用程序(xbap) 优点 完整的Wpf。 缺点 单一浏览器 需要完整的框架 不能与客户端的文件系统等进行交互 单个窗口 单一版本 Wpf单击一次 优点 完整的Wpf 可以离线工作 多个窗口 多个版本(con?) 更好地访问计算机的低级别部分 没有停机维护 缺点 单一浏览器 需要完整的框架 稍微 (?)难以安装。
我有一个WPF应用程序调用MessageBox.Show()方式返回ViewModel (检查用户是否真的要删除)。 这实际上是有效的 ,但是与MVVM背道而驰,因为ViewModel不应该明确地确定View上会发生什么。 所以现在我想我怎么才能最好地实现我的MVVM应用程序,选项中的MessageBox.Show()function : 我可以有一个消息与文字“你确定…?” 在我的XAML中有两个buttonYes和No all,并在模板上创build一个触发器,使其基于名为AreYourSureDialogueBoxIsVisible的ViewModelProperty进行折叠/可见,然后在需要此对话框时,将AreYourSureDialogueBoxIsVisible分配为“true “,并通过DelegateCommand在ViewModel中处理两个button。 我也可以尝试在XAML中使用触发器来处理这个事情,这样Deletebutton实际上只是让一些Border元素出现在消息和button中,而Yesbutton却是实际删除的。 这两种解决scheme似乎都过于复杂,因为它们与MessageBox.Show()是一对代码。 您在MVVM应用程序中如何成功实施对话框?
有什么区别 TargetType="{x:Type Button}" 和 TargetType="Button"
在过去的一年中,我看到许多不同的价值转换者出于许多不同的目的,来自许多不同的作者。 我脑海中浮现的一件事就是他们所返回的“默认”价值的广泛差异。 例如; public class MyConverter: IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { // OK, we test for some undesirable, unconvertable situation, typically null… if (value == null) { // And here are a variety of 'defaults' that I have seen, these begin the most typical. return null; return […]
我试图决定在企业软件开发中如何使用F#和C#。 math代码的F#是一个不费吹灰之力。 我喜欢使用F#进行GUI工作,尽pipe它缺lessGUIdevise器支持,但是,当然,C#GUI人员在工业中有更多的资源可用性。 但是,我不太熟悉C#+ XAML GUI开发,因此我担心引入偏见。 在一个客户端的情况下,他们有几十个相当静态的GUI(每年更换)和一些其他非常dynamic的GUI(例如业务规则引擎)。 他们已经拥有F#代码,并已经投入了F#培训,所以技能可用性不是问题。 我的印象是,C#+ XAML可以让你轻松地构build静态GUI(几个滑块,一些文本框等),但是我看不到GUIdevise器如何帮助像编程规则引擎这样的程序化GUI。 我是否认为保持大部分静态GUI(例如,向100个独立的GUI添加新的字段)将需要手动操作? 另外,我认为GUIdevise器在大量程序化的GUI环境中几乎没有用处,所以像业务规则引擎这样的东西,主要是用C#+ XAML编写的,很less使用GUIdevise器。
在WPF中使用MVVM时,最终的项目结构是什么? 从我现在看到的教程中,他们通常有文件夹:Model,ModelView和View。 在模型中,你把像Person这样的类放在捕获数据和逻辑的地方。 在ModelView中,您可以实例化在Model中定义的类。 该视图包含.xaml文件。 编辑:我编辑我原来的post发送一个示例项目结构。 我有这个问题。 如何组织这些:App.config App.xaml MainWindow.xaml 我应该像现在一样离开他们,还是应该把他们放在一个文件夹里?
注意我已经问了相关的问题: 如何结合DataTrigger和EventTrigger? 我有一个包含几个项目的列表框。 该项目的类实现INotifyPropertyChanged并具有属性IsAvailable 。 我使用该属性来使用不同的颜色在列表中指示不可用的选项。 但是,如果选定的项目不可用,则前景色应为红色。 <ListBox> <ListBox.Resources> <DataTemplate DataType="{x:Type local:InstitutionViewModel}"> <TextBlock Name="Name" Text="{Binding Name}"/> <DataTemplate.Triggers> <DataTrigger Binding="{Binding IsAvailable}" Value="False"> <Setter TargetName="Name" Property="Foreground" Value="#888"/> </DataTrigger> </DataTemplate.Triggers> </DataTemplate> </ListBox.Resources> </ListBox> 我使用上面的数据触发器灰化不可用的项目。 我面临的问题是,项目被选中的事实与模板绑定到的底层数据无关。 我真正想要的是某种多触发器,它支持依赖属性( ListBoxItem.IsSelected )上的常规Trigger和绑定数据项上的DataTrigger 。 如果不将select的概念引入我的视图模型,这可以做到吗? 对于任何人想知道为什么我不禁用不可用的项目,请理解,应用程序的要求是可选的不可用选项。 实际上有几个列表框,并在其中一个效果select其他的可用。 我不能禁用这些项目,因为如果项目在之前的select中被禁用,用户将无法改变他们的想法或探索不同的组合。