是否有一种简单的方法来更改标题字体大小而不覆盖完全复制ColumnHeaderTemplate?
注意:不确定它是否相关,但我使用提供ColumnHeaderTemplate的应用程序主题(PresentationFramework.Royale).
我正在研究一些相对较小的概念验证,用于某些业务领域,并且有一些花哨的WPF UI工作.甚至没有太疯狂,我已经看到一些非常糟糕的性能,当我使用很多功能时,我认为这是首先考虑WPF用于UI构建的主要原因.我在这里问了一个关于为什么我的动画在第一次运行时被停止的问题,最后我发现一个非常简单的UserControl花了将近半秒来构建它的可视化树.我能够找到解决症状的方法,但是初始化一个简单的控件需要很长时间才能让我感到烦恼.现在,我正在使用和不使用DropShadowEffect测试我的动画,结果是白天和黑夜.一个微妙的阴影使我的控制看起来更好,但它完全破坏了动画的流畅度.我甚至不开始使用字体渲染.当控件有一堆渐变画笔和一个投影时,我的动画计算会使文本模糊大约一整秒,然后慢慢聚焦.
所以,我想我的问题是,是否有已知的研究,博客文章或文章详细说明哪些功能在当前版本的WPF中对于关键业务应用程序是一种危险.像Effects(即DropShadowEffect),渐变画笔,关键帧动画等会对渲染质量(或者这些东西的组合)产生太大的负面影响吗?WPF 4.0的最终版本是否会纠正其中一些问题?我已经读过VS2010 beta有一些相同的问题,它们应该在最终版本中得到解决.这是因为WPF本身的改进还是因为一半的应用程序将使用以前的技术重建?
如果FirstName值为null或为空,我正在抛出一个ApplicationException,我试图在TextBlock中显示错误消息,该消息是ErrorTemplate的一部分.但它始终显示"异常已被抛出调用目标".
public string FirstName
{
get { return _firstName;}
set
{
if(String.IsNullOrEmpty(value))
throw new ApplicationException("FirstName cannot be null or empty!");
_firstName = value;
OnPropertyChanged("FirstName");
}
}
<Style x:Key="TextBoxStyle" TargetType="TextBox">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True">
<TextBlock DockPanel.Dock="Right"
Foreground="Orange"
FontSize="12pt"
Text="{Binding ElementName=MyAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
</TextBlock>
<Border BorderBrush="Green" BorderThickness="1">
<AdornedElementPlaceholder Name="MyAdorner" />
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
最后这里是TextBox控件:
<TextBox Name="txtFirstName" Style="{StaticResource TextBoxStyle}" Grid.Column="1" Grid.Row="0" Height="20" Width="100" Margin="10">
<TextBox.Text>
<Binding Path="FirstName">
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Run Code Online (Sandbox Code Playgroud) 我Canvas在XAML中应用了缩放转换.用DrawingContext我在画线上画线Canvas.我现在需要在屏幕上添加文字.我认为使用格式化文本我可以应用翻译,但无论是格式化文本还是DrawingContext接受RenderTransform.如何对文本应用缩放翻译,以便对抗画布的缩放转换?
ftext = New FormattedText("N", CultureInfo.GetCultureInfo("en-us"), Windows.FlowDirection.LeftToRight, face, Me.DBFontSize, FalconDataBlock.Foreground)
context.DrawText(ftext, .TargetLineInfo.EndAsWinPoint)
Run Code Online (Sandbox Code Playgroud) 我在SO上发现了一些关于这个问题的项目,但他们并不满足我.他们谈论INotifyProperyChanged,但这对我的情况没有帮助.
我有一个Combobox.对于ItemsSource,我使用a MultiBinding和a Converter来创建ICollectionView.在ICollectionView被绑定到ItemsSource.
在GotFocus-event上,需要刷新此绑定,因此转换器会再次触发.
我怎样才能做到这一点?
我有ListBox一个PopupControl.问题是在滚动时,Popup会调整大小以适应实际最宽的元素.
如何避免此调整大小并自动调整到整个列表中最宽的元素?
我试图把它放在一个Grid但没有成功.
我有办法知道哪个项目有焦点和WPF应用程序?有没有办法监视wpf中的所有事件和方法调用?
我有一个简单的xaml控件,具有以下网格行定义:
<Grid.RowDefinitions>
<RowDefinition Height="15*" />
<RowDefinition Height="60*" />
<RowDefinition Height="20*" />
<RowDefinition Height="20*" />
<RowDefinition Height="15*" />
</Grid.RowDefinitions>
Run Code Online (Sandbox Code Playgroud)
每行1-3个包含一个文本块,其中可能包含或不包含文本.在后面的代码中,如果没有文本,我想最小化RowDefinition.基本上我的代码背后有以下内容:
if(textblock.Text != ""){
grid.RowDefinitions[elementRow].Height = new GridLength(20, GridUnitType.Star);
}
else{
grid.RowDefinitions[elementRow].Height = new GridLength(0, GridUnitType.Star);
}
Run Code Online (Sandbox Code Playgroud)
我希望第0行和第4行保留,因为它们在xaml中定义.不幸的是,即使第2行的文本块中有文本没有显示任何内容,这也不起作用.
难道我做错了什么.
任何帮助表示赞赏,
詹姆士
我有一个GridView,其中包含文件列表,创建日期和文件大小.在网格下方,我有一个文本块,上面写着"X Files Selected.Y MB".我可以很好地绑定到SelectedItems.Count,但是我可以轻松地绑定到所选文件大小的总和吗?
下面的问号应该是SelectedItems fileSize列值的总和.有任何想法吗?
<TextBlock HorizontalAlignment="Right">
<TextBlock.Text>
<MultiBinding StringFormat=" {0} Files Selected. {1} MB">
<Binding ElementName="FilesList" Path="SelectedItems.Count"></Binding>
<Binding ElementName="FilesList" Path="SelectedItems.?????"></Binding>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
我知道我可以在代码隐藏中完成这项工作 - 但是我希望将我的代码隐藏为空并在XAML中执行.这是代码隐藏代码:
private void FilesList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
double x = 0;
foreach (FileInfo fileInfo in FilesList.SelectedItems)
{
x += fileInfo.Length;
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个WPF TextBox,定义如下:
<TextBox Text="{Binding Path=/Comments}"
Margin="351,193.91,10,36"
x:Name="txtComments"
IsReadOnly="True"
VerticalScrollBarVisibility="Auto"
LostFocus="txtComments_LostFocus"
MouseDoubleClick="txtComments_MouseDoubleClick"
AcceptsReturn="True" />
Run Code Online (Sandbox Code Playgroud)
这完全符合我的意愿; 但是,当VerticalScrollBars可见时,如果您快速单击ScrollBar,则会触发txtComments_MouseDoubleClick事件.有没有什么办法可以通过单击ScrollBar而不是文本框的主体来更改此行为或检测到事件被触发?
我想要这样做的主要原因是,如果你试图通过双击滚动条向下滚动事件被触发,导致应用程序沿着那条路走下去,如果那不是用户想要的动作,这是非常烦人的.