質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Material Design

Material Designとは、Google社によって提唱されたデザインシステムです。デジタルにおける体験を構築するための見た目や振る舞いに関するガイドラインが含まれます。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

3746閲覧

WPFのControlTemplateを”少しだけ”変更したい

s.prompt

総合スコア1

Material Design

Material Designとは、Google社によって提唱されたデザインシステムです。デジタルにおける体験を構築するための見た目や振る舞いに関するガイドラインが含まれます。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

1グッド

0クリップ

投稿2020/11/06 21:22

編集2020/11/06 21:24

前提・実現したいこと

MaterialDesignInXamlToolkitを使用してWPF(.net framework)アプリを作成しています。
Comoboboxにかかっているアニメーションをもう少しキビキビ動作させたいと思って方法を探っているのですが、WPFもToolkitも経験が浅くいまいちわかりません。

ソースを見て関連する部分は以下だと見当をつけました。

MaterialDesignTheme.ComboBox.xaml

<ControlTemplate x:Key="MaterialDesignComboBoxItemTemplate" TargetType="{x:Type ComboBoxItem}"> <Grid x:Name="GridWrapper"> <VisualStateManager.VisualStateGroups> <VisualStateGroup Name="CommonStates"> <VisualStateGroup.Transitions> <VisualTransition GeneratedDuration="0:0:0.3" To="Normal"> <VisualTransition.GeneratedEasingFunction> <CircleEase EasingMode="EaseOut" /> </VisualTransition.GeneratedEasingFunction> </VisualTransition> </VisualStateGroup.Transitions> <VisualState Name="Normal" />

このDurationを変更するるかと考えたのですが、このような既存の(長大な)ControlTemplateのごく一部を変更したい場合、どんな方法で変更するのでしょうか?
バインディングされてればプロパティから設定できると思うのですが。。。

最悪、ControlTemplate自体をコピーして、該当部分を書き換える?と思うのですが、もっとスマートな方法がある気がしてなりません。

ヒントだけでもいただければ助かります。
よろしくお願いします。

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hihijiji

2020/11/07 01:15

貴殿の考える最悪が普通の方法 部分的な差し替えも出来ないことは無いけどもっとめんどくさい 該当部分は山勘だけど DoubleAnimationの SpeedRatio かな?
s.prompt

2020/11/07 22:26

”普通”とわかっただけで、すっきりです! ありがとうございました!
guest

回答1

0

ベストアンサー

最悪、ControlTemplate自体をコピーして、該当部分を書き換える?と思うのですが、もっとスマートな方法がある気がしてなりません。

StyleBasedOnするような手軽な方法は、Templateでは残念ながら無いです。

今回の例ですとItemContainerStyleTemplateで、MaterialDesignComboBoxItemTemplateをほぼコピペすることになります。

xml

1<Window 2 x:Class="Questions302763.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" 6 Width="800" 7 Height="450"> 8 <Window.Resources> 9 <Style BasedOn="{StaticResource MaterialDesignComboBox}" TargetType="{x:Type ComboBox}"> 10 <Setter Property="ItemContainerStyle"> 11 <Setter.Value> 12 <Style BasedOn="{StaticResource MaterialDesignComboBoxItemSelectedCollapsedStyle}" TargetType="{x:Type ComboBoxItem}"> 13 <Setter Property="Template"> 14 <Setter.Value> 15 <ControlTemplate TargetType="{x:Type ComboBoxItem}"> 16 <Grid x:Name="GridWrapper"> 17 <Grid.RowDefinitions> 18 <RowDefinition Height="Auto" /> 19 </Grid.RowDefinitions> 20 21 <Border 22 x:Name="BackBorder" 23 Background="{TemplateBinding Background}" 24 BorderBrush="{TemplateBinding BorderBrush}" 25 BorderThickness="{TemplateBinding BorderThickness}" 26 SnapsToDevicePixels="True" /> 27 28 <Border 29 x:Name="MouseOverBorder" 30 Background="{TemplateBinding Foreground, 31 Converter={StaticResource BrushRoundConverter}}" 32 BorderBrush="{TemplateBinding BorderBrush}" 33 BorderThickness="{TemplateBinding BorderThickness}" 34 Opacity="0" 35 SnapsToDevicePixels="True" /> 36 <Border 37 x:Name="SelectedBorder" 38 Background="{TemplateBinding Foreground, 39 Converter={StaticResource BrushRoundConverter}}" 40 Opacity="0" 41 RenderTransformOrigin="0.5,0.5" /> 42 <materialDesign:Ripple 43 Padding="{TemplateBinding Padding}" 44 HorizontalAlignment="Stretch" 45 VerticalAlignment="Stretch" 46 HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" 47 VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" 48 Content="{TemplateBinding Content}" 49 ContentTemplate="{TemplateBinding ContentTemplate}" 50 ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}" 51 Feedback="{TemplateBinding Foreground, 52 Converter={StaticResource BrushRoundConverter}}" 53 Focusable="False" 54 RecognizesAccessKey="False" 55 SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 56 <VisualStateManager.VisualStateGroups> 57 <VisualStateGroup Name="CommonStates"> 58 <VisualStateGroup.Transitions> 59 <VisualTransition GeneratedDuration="0:0:0.1" To="Normal"> 60 <VisualTransition.GeneratedEasingFunction> 61 <CircleEase EasingMode="EaseOut" /> 62 </VisualTransition.GeneratedEasingFunction> 63 </VisualTransition> 64 </VisualStateGroup.Transitions> 65 <VisualState Name="Normal" /> 66 <VisualState Name="MouseOver"> 67 <Storyboard> 68 <DoubleAnimation 69 Storyboard.TargetName="MouseOverBorder" 70 Storyboard.TargetProperty="Opacity" 71 To="0.1" 72 Duration="0" /> 73 </Storyboard> 74 </VisualState> 75 </VisualStateGroup> 76 <VisualStateGroup Name="SelectionStates"> 77 <VisualStateGroup.Transitions> 78 <VisualTransition GeneratedDuration="0:0:0.1" /> 79 </VisualStateGroup.Transitions> 80 <VisualState Name="Selected"> 81 <Storyboard> 82 <DoubleAnimation 83 Storyboard.TargetName="SelectedBorder" 84 Storyboard.TargetProperty="Opacity" 85 To="0.18" 86 Duration="0" /> 87 </Storyboard> 88 </VisualState> 89 <VisualState Name="Unselected" /> 90 </VisualStateGroup> 91 <VisualStateGroup Name="FocusStates"> 92 <VisualStateGroup.Transitions> 93 <VisualTransition GeneratedDuration="0:0:0.1" To="Unfocused" /> 94 </VisualStateGroup.Transitions> 95 <VisualState Name="Focused"> 96 <Storyboard> 97 <DoubleAnimation 98 Storyboard.TargetName="MouseOverBorder" 99 Storyboard.TargetProperty="Opacity" 100 To="0.1" 101 Duration="0" /> 102 </Storyboard> 103 </VisualState> 104 <VisualState Name="Unfocused" /> 105 </VisualStateGroup> 106 </VisualStateManager.VisualStateGroups> 107 </Grid> 108 <ControlTemplate.Triggers> 109 <Trigger Property="IsEnabled" Value="False"> 110 <Setter TargetName="GridWrapper" Property="Opacity" Value="0.56" /> 111 </Trigger> 112 <MultiTrigger> 113 <MultiTrigger.Conditions> 114 <Condition Property="Tag" Value="{StaticResource AllowCollapse}" /> 115 <Condition Property="IsSelected" Value="True" /> 116 </MultiTrigger.Conditions> 117 <Setter Property="Height" Value="0" /> 118 </MultiTrigger> 119 </ControlTemplate.Triggers> 120 </ControlTemplate> 121 </Setter.Value> 122 </Setter> 123 </Style> 124 </Setter.Value> 125 </Setter> 126 </Style> 127 </Window.Resources> 128 <Grid> 129 <StackPanel> 130 <GroupBox Header="ノーマル"> 131 <ComboBox Style="{StaticResource MaterialDesignComboBox}"> 132 <ComboBoxItem>aaa</ComboBoxItem> 133 <ComboBoxItem>bbb</ComboBoxItem> 134 <ComboBoxItem>ccc</ComboBoxItem> 135 </ComboBox> 136 </GroupBox> 137 138 <GroupBox Header="キビキビ"> 139 <ComboBox> 140 <ComboBoxItem>aaa</ComboBoxItem> 141 <ComboBoxItem>bbb</ComboBoxItem> 142 <ComboBoxItem>ccc</ComboBoxItem> 143 </ComboBox> 144 </GroupBox> 145 </StackPanel> 146 </Grid> 147</Window>

s.promptさんとまったく同じことを思っている方はいるようですが、クローズしています(前向きに検討中なのか・やる気はないのかは、自動翻訳では読み取れなかったです^^;
Adding support for customization of visualtransition duration of combobox item to normal state by koutinho · Pull Request #1290 · MaterialDesignInXAML/MaterialDesignInXamlToolkit

投稿2020/11/07 07:21

編集2023/07/23 09:20
TN8001

総合スコア9317

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s.prompt

2020/11/07 22:36

方法がないとわかっただけでもうれしいです! やり方まで書いていただいて神か。。。拝ませていただきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問