小编Dav*_*mer的帖子

更改GridView的ColumnHeader的字体大小

是否有一种简单的方法来更改标题字体大小而不覆盖完全复制ColumnHeaderTemplate?

注意:不确定它是否相关,但我使用提供ColumnHeaderTemplate的应用程序主题(PresentationFramework.Royale).

wpf gridview themes styles templating

2
推荐指数
1
解决办法
6064
查看次数

WPF动画/ UI具有性能和基准测试功能

我正在研究一些相对较小的概念验证,用于某些业务领域,并且有一些花哨的WPF UI工作.甚至没有太疯狂,我已经看到一些非常糟糕的性能,当我使用很多功能时,我认为这是首先考虑WPF用于UI构建的主要原因.我在这里问了一个关于为什么我的动画在第一次运行时被停止的问题,最后我发现一个非常简单的UserControl花了将近半秒来构建它的可视化树.我能够找到解决症状的方法,但是初始化一个简单的控件需要很长时间才能让我感到烦恼.现在,我正在使用和不使用DropShadowEffect测试我的动画,结果是白天和黑夜.一个微妙的阴影使我的控制看起来更好,但它完全破坏了动画的流畅度.我甚至不开始使用字体渲染.当控件有一堆渐变画笔和一个投影时,我的动画计算会使文本模糊大约一整秒,然后慢慢聚焦.

所以,我想我的问题是,是否有已知的研究,博客文章或文章详细说明哪些功能在当前版本的WPF中对于关键业务应用程序是一种危险.像Effects(即DropShadowEffect),渐变画笔,关键帧动画等会对渲染质量(或者这些东西的组合)产生太大的负面影响吗?WPF 4.0的最终版本是否会纠正其中一些问题?我已经读过VS2010 beta有一些相同的问题,它们应该在最终版本中得到解决.这是因为WPF本身的改进还是因为一半的应用程序将使用以前的技术重建?

.net wpf performance

2
推荐指数
2
解决办法
2210
查看次数

WPF ExceptionValidationRule未显示在Validation.Errors集合中

如果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)

validation wpf

2
推荐指数
1
解决办法
3558
查看次数

如何将Scale Translation应用于DrawingContext?

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)

wpf drawing drawtext

2
推荐指数
1
解决办法
2077
查看次数

如何以编程方式刷新组合框的itemssource的绑定?

我在SO上发现了一些关于这个问题的项目,但他们并不满足我.他们谈论INotifyProperyChanged,但这对我的情况没有帮助.

我有一个Combobox.对于ItemsSource,我使用a MultiBinding和a Converter来创建ICollectionView.在ICollectionView被绑定到ItemsSource.

GotFocus-event上,需要刷新此绑定,因此转换器会再次触发.

我怎样才能做到这一点?

c# wpf binding combobox

2
推荐指数
1
解决办法
1万
查看次数

WPF ListBox固定宽度

我有ListBox一个PopupControl.问题是在滚动时,Popup会调整大小以适应实际最宽的元素.

如何避免此调整大小并自动调整到整个列表中最宽的元素?

我试图把它放在一个Grid但没有成功.

wpf listbox fixed width

2
推荐指数
1
解决办法
2394
查看次数

有没有办法知道哪个项目在WPF应用程序中有焦点?

我有办法知道哪个项目有焦点和WPF应用程序?有没有办法监视wpf中的所有事件和方法调用?

debugging wpf focus

2
推荐指数
1
解决办法
797
查看次数

动态行定义高度

我有一个简单的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行的文本块中有文本没有显示任何内容,这也不起作用.

难道我做错了什么.

任何帮助表示赞赏,

詹姆士

c# wpf grid

2
推荐指数
2
解决办法
2万
查看次数

绑定到WPF GridView中的SelectedItems总和

我有一个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 binding gridview selecteditem

2
推荐指数
1
解决办法
4105
查看次数

WPF TextBox DoubleClick事件快速使用滚动条时触发

我有一个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而不是文本框的主体来更改此行为或检测到事件被触发?

我想要这样做的主要原因是,如果你试图通过双击滚动条向下滚动事件被触发,导致应用程序沿着那条路走下去,如果那不是用户想要的动作,这是非常烦人的.

.net wpf scroll textbox event-handling

2
推荐指数
1
解决办法
2912
查看次数