标签: controltemplate

WPF - 在样式中使用ControlTemplate资源

创建样式时,是否可以将ControlTemplate属性设置为先前定义的资源?例如,如果我在ResourceDictionary中有以下内容:

<ControlTemplate x:Key="MyControlTemplate" TargetType="{x:Type Button}">
...
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)

后来想在这样的样式中使用它:

<Style x:Key="MyStyle" TargetType="{x:Type Button}">
    <Setter Property="Template" Value="???"/>
</Style>
Run Code Online (Sandbox Code Playgroud)

那可能吗?

wpf xaml styles controltemplate

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

如何将ScrollViewer放在它应该滚动的内容之上

我想把ScrollViewer放在它滚动的内容重叠/位于其上面的方式.我会设置ScrollViewer的不透明度,以便内容在下面可见.

据我所知,默认的ScrollViewer,这似乎不可能开箱即用,因为内容嵌套在ScrollViewer中.

关于如何使这项工作的任何想法?

编辑:我知道ScrollViewer是一个装饰器,内容不知道ScrollViewer.这种分离很好,我不希望内容知道ScrollViewer.我尝试做的是纯粹的视觉(布局)事物.只需在内容之上显示ScrollViewer.ScrollViewer的行为应保持不变.

wpf scrollbar styling scrollviewer controltemplate

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

WPF:使整个边框可点击

我正在尝试在WPF中实现一个按钮,当您单击它时会显示一个菜单.我已经完成了所有工作,控件的ControlTemplate如下所示.(该控件扩展了ToggleButton).

<Border x:Name="Border" Padding="3" CornerRadius="1" BorderThickness="1"
    VerticalAlignment="Stretch" HorizontalAlignment="Stretch" IsHitTestVisible="True">
Run Code Online (Sandbox Code Playgroud)

问题是,菜单仅在用户单击路径绘制的小箭头时显示.有什么方法可以使整个边界HitTestVisible?

wpf user-controls controltemplate

9
推荐指数
1
解决办法
4040
查看次数

WPF:如何制作一个"pushlike"复选框?

我想制作一个看起来完全像按钮的CheckBox.我最初的微弱尝试根本不起作用.

<CheckBox x:Name="test">
    Testing!
    <CheckBox.Template>
        <ControlTemplate>
            <Button>
                <ContentPresenter/>
            </Button>
        </ControlTemplate>
    </CheckBox.Template>
</CheckBox>
Run Code Online (Sandbox Code Playgroud)

ContentPresenter不起作用(按钮为空),单击该按钮时,IsChecked属性不会切换.此外,当IsChecked为真时,我不知道如何使按钮看起来被推.

wpf checkbox button controltemplate

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

WPF:为什么我不应该在ControlTemplate中使用{TemplateBinding Margin} - Margin是否只适用于元素的容器?

我已经为Button创建了自己的ControlTemplate,如下所示:

<Style x:Key="LightButtonStyle" TargetType="{x:Type ButtonBase}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ButtonBase}">
                <Border
                    x:Name="WrappingBorder"
                    Margin="{TemplateBinding Margin}"
                    ...
                    >
                    <ContentPresenter 
                        Content="{TemplateBinding Content}" 
                        ...
                        >
                    </ContentPresenter>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

现在,我注意到当我将余量设置为我的按钮时,例如:

<Button 
    Style="{StaticResource LightButtonStyle}"
    Margin="20"
    >
    Hello world!
</Button>
Run Code Online (Sandbox Code Playgroud)

按钮实际上是双边距-40.我认为控件实际上应该从不使用边距,并且在安排阶段只有按钮的祖先才能读取边距属性.我已经看了WPF的默认样式,并发现没有人使用过Margin.

这是正确的结论(保证金只能由集装箱正确安排)吗?换句话说,每次我在我的风格中使用{TemplateBinding Margin}时,我会获得双倍边距?是否有一些类似属性的列表,我的控件不应该使用(因为它们仅仅用于"周围世界")?

你能指点我的MSDN页面来解释这个吗?谢谢!

编辑:

我想我应该在http://msdn.microsoft.com/en-us/library/ms745058.aspxhttp://msdn.microsoft.com/en-us/library/ms751709.aspx找到答案,但我不知道我们认为他们明确提到使用Margin属性永远不是控制者,它始终是评估它并使用它来影响布局的祖先或wpf系统......

wpf layout margin controltemplate

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

WPF - ControlTemplate上的事件?

有谁知道为什么我不能在控件模板上设置事件?

例如,以下代码行将无法编译.它通过控件模板中的任何事件执行此操作.

<ControlTemplate x:Key="DefaultTemplate" TargetType="ContentControl">
   <StackPanel Loaded="StackPanel_Loaded">

   </StackPanel>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)

我使用的是MVVM设计模式,此处的控件位于ResourceDictionary中,该ResourceDictionary被添加到应用程序的MergedDictionaries中.

wpf controltemplate routed-events

9
推荐指数
1
解决办法
7594
查看次数

代码生成:自定义控制器模板

首先,我使用的是Asp.Net MVC 4,并且我已经按照教程修改了我的解决方案以包含CodeTemplates文件夹.(我认为我的问题可能与MVC有关吗?)

code_templates

我已经用我自己的JQgrid模板替换了Ajax网格模板中的代码,这对于启动我的项目很好.但是我在创建全新的控制器模板时遇到了麻烦(让它们显示在创建新的控制器菜单中)

add_controller_modal

有任何想法吗?

更新

我在使用脚手架功能时采取了一些尝试,但这并不是我想到的(虽然它确实像预期的那样工作.我观看了史蒂夫桑德森关于这个主题非常有用的视频),任何获取方式我的自定义视图/控制器在添加控制器gui里面?

asp.net-mvc t4 controltemplate asp.net-mvc-4

9
推荐指数
1
解决办法
5119
查看次数

PasswordBox不承担样式

我有以下样式定义:

<!-- Border -->
<Style x:Key="MyControlBorder" TargetType="{x:Type Border}">
    <Setter Property="BorderBrush" Value="DarkKhaki" />
    <Setter Property="Background" Value="White" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="CornerRadius" Value="10" />
</Style>

<!-- TextBox -->
<Style x:Key="MyTextBox" TargetType="{x:Type TextBox}">
    <Setter Property="Height" Value="30" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TextBoxBase}">
                <Border Name="TextBoxBorder" Style="{StaticResource MyControlBorder}">
                    <ScrollViewer x:Name="PART_ContentHost"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<!-- PasswordBox -->
<Style x:Key="MyPasswordBox" TargetType="{x:Type PasswordBox}">
    <Setter Property="Height" Value="30" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Control}">
                <Border Name="Border" Style="{StaticResource MyControlBorder}">
                    <ScrollViewer x:Name="PART_ContentHost" />
                </Border>
            </ControlTemplate>
        </Setter.Value> …
Run Code Online (Sandbox Code Playgroud)

wpf xaml styles passwordbox controltemplate

9
推荐指数
1
解决办法
2445
查看次数

与TextBlock具有相同剪裁的TextBox(TextBox模板)

TextBlock元素处理LineHeight得很好,允许文本完全显示,而不会剪切.但是,我想将其更改TextBox为便于编辑文本,这是我的麻烦开始的地方.

TextBlock显示文字是这样的:

高大的字母显示在TextBlock的高度之外

TextBox显示文字是这样的:

高大的字母被剪裁了!

我试图摆弄ClipToBoundsClip属性,但它只在元素内剪辑,不会扩展到边界之外.

LineHeight需要将该属性设置为低以调节线之间的差距,因此不能进行更改.

我也尝试过Padding,但它只是这样做

填充,但文本仍然被剪裁

如果这是唯一的解决方案,那我就会走开,聆听按键并相应地更改文本,但这似乎是很多工作,我不认为这是一个很好的解决方案,所以这是我的浓缩题:

如何使TextBox剪辑文本尽可能不像TextBlock它一样?


更新这里是样式代码(我目前拥有的代码)以及它的应用位置.

private static Style GetFontTextBlock()
{
    var style = new Style();
    style.Setters.Add(new Setter(TextBlock.LineStackingStrategyProperty, LineStackingStrategy.BlockLineHeight));
    style.Setters.Add(new Setter(TextBlock.IsHyphenationEnabledProperty, true));
    style.Setters.Add(new Setter(TextBlock.TextWrappingProperty, TextWrapping.Wrap));
    style.Setters.Add(new Setter(Control.BorderBrushProperty, null));
    return style;
}

public static Style GetHeadline()
{
    // ApplyFont sets the Control.FontFamilyProperty to Geogrotesque Condensed Regular.
    // It's a purchased font so I can't supply it, …
Run Code Online (Sandbox Code Playgroud)

wpf xaml wpf-controls controltemplate

9
推荐指数
1
解决办法
546
查看次数

在WPF中,如何在设计视图中将样式应用于UserControl?

我通常在tab下的App.xml中定义样式和控件模板.因此,在设计UI时,我可以在带有.NET3.5的Visual Studio 2008中看到设计视图中应用了样式的UI.

但是,在另一种情况下,有时我只使用UserControl项目,在这种情况下,没有App.xml,因此UI在设计视图中显示为默认外观.在运行时很难知道实际的外观.

有没有办法将样式应用于UserControl?如果有一种方法可以在应用程序项目和UserControl项目之间共享相同的样式和模板,那将是完美的!

如果有解决方案,请告诉我.

c# wpf user-controls styles controltemplate

8
推荐指数
1
解决办法
1120
查看次数