• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

Using a StaticResource in a template

K

Keith Patrick

#1
I've got a style declared where, within the Template setter, I try to drop
in a previously-declared resource declared like so:
<Polyline x:Key="UpArrowGlyph" Points="0,0 0.5,0.3 1,0" Stroke="#FF5B6473"
StrokeThickness="0.2" RenderTransformOrigin="0.5,0.5">

<Polyline.RenderTransform>

<RotateTransform Angle="180"/>

</Polyline.RenderTransform>

</Polyline>



However, I can't seem to get the syntax for dropping it into a style. I use
them in my UI itself, and it works just fine, but if I construct my template
in this way:

<Viewbox Stretch="Fill">

<StaticResource ResourceKey="UpArrowGlyph" />

</Viewbox>

It says I can't use non-frameworkelements in my style. I know I'm missing
some basic piece of syntax, but I've been stumped on this one for several
days (including getting sidetracked on a 360 :) ).
 
N

Nick Kramer [MSFT]

#2
> It says I can't use non-frameworkelements in my style.

I don't think it has anything to do with the resource reference, it's
because Polyline is not a subclass of FrameworkElement. The root element in
the template must be a framework element, if you don't have a useful
framework element just use a Border with zero-sized border.

-Nick Kramer [MSFT]
http://blogs.msdn.com/nickkramer

---
This posting is provided "AS IS" with no warranties, and confers no rights.
Use of included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm


"Keith Patrick" <richard_keith_patrick@nospam.hotmail.com> wrote in message
news:uI1ziVfJGHA.3100@tk2msftngp13.phx.gbl...
> I've got a style declared where, within the Template setter, I try to drop
> in a previously-declared resource declared like so:
> <Polyline x:Key="UpArrowGlyph" Points="0,0 0.5,0.3 1,0" Stroke="#FF5B6473"
> StrokeThickness="0.2" RenderTransformOrigin="0.5,0.5">
>
> <Polyline.RenderTransform>
>
> <RotateTransform Angle="180"/>
>
> </Polyline.RenderTransform>
>
> </Polyline>
>
>
>
> However, I can't seem to get the syntax for dropping it into a style. I
> use them in my UI itself, and it works just fine, but if I construct my
> template in this way:
>
> <Viewbox Stretch="Fill">
>
> <StaticResource ResourceKey="UpArrowGlyph" />
>
> </Viewbox>
>
> It says I can't use non-frameworkelements in my style. I know I'm missing
> some basic piece of syntax, but I've been stumped on this one for several
> days (including getting sidetracked on a 360 :) ).
>
 
N

Nick Kramer [MSFT]

#3
D'oh! It was pointed out to me that PolyLine is a Shape and thus a
FrameworkElement.

What's the complete xaml you're using?

--
-Nick Kramer [MSFT]
http://blogs.msdn.com/nickkramer

---
This posting is provided "AS IS" with no warranties, and confers no rights.
Use of included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm


"Nick Kramer [MSFT]" <nkramer@ms.spam> wrote in message
news:eWC9M25JGHA.216@TK2MSFTNGP15.phx.gbl...
>> It says I can't use non-frameworkelements in my style.

>
> I don't think it has anything to do with the resource reference, it's
> because Polyline is not a subclass of FrameworkElement. The root element
> in the template must be a framework element, if you don't have a useful
> framework element just use a Border with zero-sized border.
>
> -Nick Kramer [MSFT]
> http://blogs.msdn.com/nickkramer
>
> ---
> This posting is provided "AS IS" with no warranties, and confers no
> rights. Use of included script samples are subject to the terms specified
> at http://www.microsoft.com/info/cpyright.htm
>
>
> "Keith Patrick" <richard_keith_patrick@nospam.hotmail.com> wrote in
> message news:uI1ziVfJGHA.3100@tk2msftngp13.phx.gbl...
>> I've got a style declared where, within the Template setter, I try to
>> drop in a previously-declared resource declared like so:
>> <Polyline x:Key="UpArrowGlyph" Points="0,0 0.5,0.3 1,0"
>> Stroke="#FF5B6473" StrokeThickness="0.2" RenderTransformOrigin="0.5,0.5">
>>
>> <Polyline.RenderTransform>
>>
>> <RotateTransform Angle="180"/>
>>
>> </Polyline.RenderTransform>
>>
>> </Polyline>
>>
>>
>>
>> However, I can't seem to get the syntax for dropping it into a style. I
>> use them in my UI itself, and it works just fine, but if I construct my
>> template in this way:
>>
>> <Viewbox Stretch="Fill">
>>
>> <StaticResource ResourceKey="UpArrowGlyph" />
>>
>> </Viewbox>
>>
>> It says I can't use non-frameworkelements in my style. I know I'm
>> missing some basic piece of syntax, but I've been stumped on this one for
>> several days (including getting sidetracked on a 360 :) ).
>>

>
>
 
K

Keith Patrick

#4
This is the style:
<Style x:Key="{x:Type ScrollBar}"
TargetType="{x:Type ScrollBar}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ScrollBar}">
<Grid Background="{TemplateBinding Background}">
<RowDefinition MaxHeight="{DynamicResource {x:Static
SystemParameters.VerticalScrollBarButtonHeightKey}}" />
<RowDefinition Height="1E-05*" />
<RowDefinition MaxHeight="{DynamicResource {x:Static
SystemParameters.VerticalScrollBarButtonHeightKey}}" />
<RepeatButton Command="ScrollBar.LineUpCommand"
Height="{DynamicResource {x:Static
SystemParameters.VerticalScrollBarButtonHeightKey}}"
MinWidth="{DynamicResource {x:Static
SystemParameters.VerticalScrollBarWidthKey}}">
<Viewbox Stretch="Fill">
<StaticResource ResourceKey="UpArrowGlyph"
/>
</Viewbox>
</RepeatButton>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

And teh resource is here:
<Polyline x:Key="UpArrowGlyph"
Points="0,0 0.5,0.3 1,0"
Stroke="#FF5B6473"
StrokeThickness="0.2"
RenderTransformOrigin="0.5,0.5">
<Polyline.RenderTransform>
<RotateTransform Angle="180"/>
</Polyline.RenderTransform>
</Polyline>