AnimatedScrollViewer
から継承したカスタムコントロールを使用するWPFプログラムを職場で書いていますScrollViewer
。次のデフォルト テンプレートがあります。
<Style TargetType="{x:Type Controls:AnimatedScrollViewer}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Controls:AnimatedScrollViewer}">
<Grid x:Name="PART_LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ScrollContentPresenter x:Name="PART_ScrollContentPresenter" />
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ScrollBar x:Name="PART_HorizontalScrollBar"
Orientation="Horizontal"
IsEnabled="{TemplateBinding IsPaused}"
Value="{TemplateBinding HorizontalOffset}"
Maximum="{TemplateBinding ScrollableWidth}"
ViewportSize="{TemplateBinding ViewportWidth}"
Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" />
<StackPanel Grid.Column="1">
<Image Source="{StaticResource LockedImage}"
Visibility="{TemplateBinding IsPlaying, Converter={StaticResource boolToVisConverter}}"/>
<Image Source="{StaticResource UnlockedImage}"
Visibility="{TemplateBinding IsPaused, Converter={StaticResource boolToVisConverter}}"/>
</StackPanel>
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
以下を使用して、これをデフォルトのスタイルとして設定しています。
[...]
public class AnimatedScrollViewer : ScrollViewer
{
static AnimatedScrollViewer()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(AnimatedScrollViewer), new FrameworkPropertyMetadata(typeof(AnimatedScrollViewer)));
}
[...]
スタイルは以下のGeneric.xaml
ディクショナリで参照されており、これは in として参照されていMergedDictionary
ますApp.xaml
。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ConvertersDictionary.xaml" />
<ResourceDictionary Source="pack://application:,,,/JamesWright.Utils.EndpointCaller.Views;component/Themes/EndpointStyles.xaml" />
<ResourceDictionary Source="pack://application:,,,/JamesWright.Utils.EndpointCaller.Views;component/Themes/ImageResources.xaml" />
<ResourceDictionary Source="pack://application:,,,/JamesWright.Utils.EndpointCaller.Views;component/Themes/Resources.xaml" />
<ResourceDictionary Source="pack://application:,,,/JamesWright.Utils.EndpointCaller.Views;component/Controls/AnimatedScrollViewer.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
本当に奇妙なのは、プログラムが自分のマシンと Windows 8.1 仮想マシンで実行されている場合にのみスタイルがコントロールに適用され、同僚のコンピューターとチームのコンピューターには適用されないことです。ScrollBar
「IsPaused」が true の場合にのみ関連付けを有効にする必要があるため、スタイルが適用されないことはわかっています。ただし、同僚のマシンでは、常に有効になっています。また、テンプレートで指定した画像が結果として表示されません。
Style
が特定のマシンに適用されない場合がある既知の理由はありますか? アプリを逆コンパイルしましたが、リソースは正しいファイルを参照しています。私たちは一日中髪を引っ張っているので、助けていただければ幸いです:P
更新: Windows 8 ラップトップにダウンロードしたところ、スタイルが正しく適用されました。
更新 #2:pack
構文ではなく相対パスを使用しようとしましたが、成功しませんでした