相关疑难解决方法(0)

如何在WPF中应用多个样式

在WPF中,我如何将多个样式应用于FrameworkElement?例如,我有一个已经有风格的控件.我也有一个单独的风格,我想添加它,而不会吹掉第一个.样式有不同的TargetTypes,所以我不能只用另一个扩展一个.

.net wpf styles

148
推荐指数
4
解决办法
9万
查看次数

WPF错误样式仅在选项卡控件的可见选项卡上正确呈现

我有一个数据对象用于包含支持INotifyPropertyChanged和我的UI数据IDataErrorInfo.最初我将所有UI控件都显示在一个大型WPF应用程序中,并且很高兴看到通过此自定义样式标记的错误:

    <!-- Set error style for textboxes -->
    <Style x:Key="txtBoxErrStyle" TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="True">
                <Setter Property="ToolTip" 
                            Value="{Binding RelativeSource={x:Static RelativeSource.Self}, 
                            Path=(Validation.Errors)[0].ErrorContent}" />
            </Trigger>
        </Style.Triggers>

        <Setter Property="Validation.ErrorTemplate">
            <Setter.Value>
                <ControlTemplate>
                    <DockPanel DockPanel.Dock="Right">
                        <AdornedElementPlaceholder />
                        <Image Source="Error.png"
                                   Height="16"
                                   Width="16"
                                   ToolTip="{Binding Path=AdornedElement.ToolTip, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Adorner}}}" />
                    </DockPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
Run Code Online (Sandbox Code Playgroud)

我今天正在重新组织该程序,并决定将各种UI控件分发到几页TabControl.我正在使用的结构布局是:

<tabcontrol>
    <tabitem>
        <AdornerDecorator>
           [.. various Stack Panels, Groups and UI controls moved from original layout ..]
        </AdornerDecorator>
    </tabItem>
    <tabitem>
        <AdornerDecorator>
           [.. various Stack Panels, …
Run Code Online (Sandbox Code Playgroud)

c# wpf tabs styles tabcontrol

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

在WPF中,有没有办法将两个Style组合成一个控件?

我的情况如下.

我有一个App.xaml,包括ListView样式,如下所示:

<Style x:Key="{x:Type ListViewItem}" TargetType="ListViewItem">
    <Setter Property="SnapsToDevicePixels" Value="true"/>
    <Setter Property="OverridesDefaultStyle" Value="true"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBoxItem">
              ...
Run Code Online (Sandbox Code Playgroud)

但是,我想将一些样式添加到另一个xaml中,让我们在Window.xaml中这样说:

 <ListView AlternationCount="2" Background="#FFECECEC">
    <ListView.Resources>
        <Style x:Key="{x:Type ListViewItem}" TargetType="{x:Type ListViewItem}">
            <EventSetter Event="PreviewMouseDoubleClick" Handler="OnPreviewMouseDoubleClick" />
        </Style>
    </ListView.Resources>
 </ListView>
Run Code Online (Sandbox Code Playgroud)

所以,我想要做的是在App.xaml中将基本设计的样式定义为默认样式.然后,添加一些修改,例如添加上下文菜单,从每个xaml添加事件.

但是,通过上面的实现,App.xaml中定义的样式将被Window.xaml中定义的样式覆盖.

有没有办法解决问题并实现它?

wpf xaml styles

6
推荐指数
1
解决办法
5298
查看次数

WPF中的层叠样式(一个CSS)

有没有办法在WPF中指定这样的东西:

CSS:

#someSpan input { color: #f1f1f1; }
or
span input { color: #f1f1f1; }
Run Code Online (Sandbox Code Playgroud)

意思是,我希望容器中的所有TextBlock元素都遵循x样式,而不必将样式应用于每个文本块.

为了澄清,我需要在WPF中做这样的事情.

我知道一个样式的BasedOn属性..但这不是我在这里寻找的东西

寻找这样的东西

 <Style x:Key="FileItem"  TargetType="{x:Type #SomeContainer TextBlock}">
Run Code Online (Sandbox Code Playgroud)

或者也许在SomeContainer中,添加将应用于其所有文本块的TextBlock样式

css wpf styling

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

标记扩展“StaticResourceExtension”要求在 IServiceProvider 中为 ProvideValue 实现“IXamlSchemaContextProvider”

我已经使用了几年的资源扩展在设计时在一个新的 .Net 4 项目中停止工作,并出现以下错误:

标记扩展“StaticResourceExtension”要求在 IServiceProvider 中为 ProvideValue 实现“IXamlSchemaContextProvider”。

扩展中的相关方法如下:

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        Style resultStyle = new Style();
        foreach (string currentResourceKey in resourceKeys)
        {
            object key = currentResourceKey;
            if (currentResourceKey == ".")
            {
                IProvideValueTarget service = (IProvideValueTarget)serviceProvider.GetService(typeof(IProvideValueTarget));
                key = service.TargetObject.GetType();
            }
            Style currentStyle = new StaticResourceExtension(key).ProvideValue(serviceProvider) as Style;
            if (currentStyle == null)
                throw new InvalidOperationException("Could not find style with resource key " + currentResourceKey + ".");
            resultStyle.Merge(currentStyle);
        }
        return resultStyle;
    }
Run Code Online (Sandbox Code Playgroud)

据推测,编译器给出了错误,因为当我调用时currentStyle = new StaticResourceExtension(key).ProvideValue(serviceProvider);,我传递的 …

c# wpf extension-methods xaml .net-4.0

6
推荐指数
1
解决办法
3036
查看次数

标签 统计

wpf ×5

styles ×3

c# ×2

xaml ×2

.net ×1

.net-4.0 ×1

css ×1

extension-methods ×1

styling ×1

tabcontrol ×1

tabs ×1