我想知道如何使用Visual Studio提取(获取副本)给定控件的默认模板。 我知道这可以用Expression Blend来完成(右键点击一个控件,“Edit Template” – >“Edit a Copy …”),然后在Xaml中复制默认控件模板。 但是,这完全可以用Visual Studio来完成吗?
我想知道屏幕分辨率,以便我可以根据Windows 8应用程序的分辨率来设置元素的高度。
在架构上,我认为WPF是相当惊人的。 一般来说,我是底层渲染/animation内部工作的忠实粉丝。 模板和样式的灵活性设置是相当令人印象深刻的。 但我讨厌XAML–我觉得这使许多事情变得复杂。 我已经用它在大型和小型应用程序,我发现自己多次试图找出如何在XAML中做的一些基本原则是基本的,但语法是古怪的。 不仅如此,我还多次想知道parsing/绑定的某些部分有多沉重。 (我知道它是编译的,但是我不确定在运行时仍然有多less评估) XAML只是构build和加载可视化树的一种方式。 是否有任何框架可以简化以非XML,基于代码的方式构build可视化树? 具体而言,我对框架感兴趣,可以在保留MVVM方法的同时缓解以下任何问题: 强有力的绑定。 指定ViewModel必须符合特定的types。 我假设BaseBinding在底层使用了reflection,我对这个速度有些怀疑,更不用说破坏性的绑定令人讨厌了。 更快的绑定,非INotifyPropertyChanged绑定。 看起来像某种BindableProperty<T>可以被创build,绑定可以直接监听,而不是接收所有的ViewModel属性更改。 直接callback与string参数的使用似乎也是有利的。 一种不同的资源pipe理方法; 再次,强types的某种字典可能是相当不错的。 我几乎喜欢将样式看作lambda或什么来捕获强types的方面。 总而言之,任何非基于XAML的框架都适合MVVM,而且是强types的?
我有一个接近下面的代码的扩展器的自定义模板。 我不得不改变一些代码来取出自定义类,画笔等。 <Style TargetType="{x:Type Expander}"> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> <Setter Property="VerticalContentAlignment" Value="Top" /> <Setter Property="BorderBrush" Value="Transparent" /> <Setter Property="FontFamily" Value="Tahoma" /> <Setter Property="FontSize" Value="12" /> <Setter Property="Foreground" Value="Black" /> <Setter Property="BorderThickness" Value="1" /> <Setter Property="Margin" Value="2,0,0,0" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Expander}"> <Border x:Name="Border" SnapsToDevicePixels="true" Background="White" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Margin="0,0,0,10" Padding="0" CornerRadius="8"> <DockPanel> […]
如何在代码后面设置Height="*"和Height="Auto" ?
背景:我正在使用MVVM创build一个WPF应用程序,并使用一个DI容器来构build我的ViewModels 我的App.xaml看起来像这样: <Application x:Class="WpfApp.App" …xmlns etc… StartupUri="MainWindow.xaml"> <Application.Resources> <app:ServiceLocator x:Key="serviceLocator" /> </Application.Resources> </Application> MainWindow.xaml看起来像这样: <Window x:Class="CompositeMefWpfApp.MainWindow" …xmlns etc… > <Control.DataContext> <Binding Path="MainWindowViewModel" Source="{StaticResource serviceLocator}" /> </Control.DataContext> 现在,这一切工作正常,但StartupUri硬编码到XAML,我不想。 根据我发现的StartupUri和文章的指导,我删除了StartupUri ,并尝试通过在App.xaml.cs中挂载OnStartup来创buildMainWindow ,如下所示: protected override void OnStartup( StartupEventArgs e ) { base.OnStartup(e); new MainWindow().Show(); } 问题是,试图显示窗口时,应用程序崩溃,此例外: 找不到名为“{serviceLocator}”的资源。 资源名称区分大小写。 标记文件“WpfApp; component / mainwindow.xaml”中的对象“System.Windows.Data.Binding”出错第8行45位。 据我所知, <Application.Resources>部分是根本没有被读出的xaml文件。 我可以把一些代码放在OnStartup中,像这样以编程方式添加资源: Resources.BeginInit(); Resources.Add("serviceLocator", new […]
在WPF中,有没有办法让TextBlock的Text属性包含硬编码的文本和特定的绑定? 我想到的是以下几点(当然,下面不会编译) : <TextBlock Text="Number of Fans: {Binding Artist.Fans.Count}"></TextBlock>
我希望在我的WPF应用程序中使用<Image>响应鼠标点击。 只有“鼠标向上”和“下注”事件可用于开箱即用。 我觉得这很特别。 有没有办法扩大控制或使用另一种控制方法来给出相同的效果?
我正在创build一个UserControl我想要使用这样的东西: <controls:ColorWithText Color="Red" Text="Red color" /> 到目前为止,我已经实现了类似这样的控制: <UserControl x:Class="Namespace.ColorWithText" Name="ThisControl"> <StackPanel Orientation="Horizontal" > <Border Width="15" Height="15" Background="{Binding Color, ElementName=ThisControl}" /> <TextBlock Text="{Binding Text, ElementName=ThisControl}" /> </StackPanel> </UserControl> 其中Color和Text是在代码中定义的控件的依赖项属性。 这工作,但每次指定ElementName似乎没有必要。 另一个可行的select是使用 <UserControl x:Class=… DataContext="{Binding ElementName=ThisControl}" Name="ThisControl"> 而不是指定ElementName ,但是这对我来说也不是一个干净的解决scheme。 我有两个问题: 为什么不<UserControl DataContext="{RelativeSource Self}">工作? 什么是这样做的最好方法?
我没有看到一个button来从Visual Studio 2010中的WPF的XAML窗口中分隔devise器窗口。 我有三个屏幕,我想要一个全屏XAML窗口和一个全屏幕devise器窗口。