我在app.xaml
中定义了样式。这种样式包含几个文本TextBlocks,当我将样式应用于对象时,我想控制这种样式,在这种情况下是UserPin。 如何访问这些TextBlocks运行时? 我通过获取其风格:Silverlight:将datacontext应用于样式中的元素
Style = Application.Current.Resources["UserPin"] as Style;
的样式看起来是这样的:
<Style x:Name="UserPin" TargetType="RRML_UserControls:UserPin" >
<Setter Property="RenderTransformOrigin" Value="0.5,0.5" />
<Setter Property="AnchorPoint" Value="0.5,0.5" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RRML_UserControls:UserPin">
<Grid Height="71.969" Width="Auto">
<Grid.RenderTransform>
<ScaleTransform x:Name="PART_PinScale" />
</Grid.RenderTransform>
<Grid.RowDefinitions>
<RowDefinition Height="29"/>
<RowDefinition Height="16"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.247*"/>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="0.753*"/>
</Grid.ColumnDefinitions>
<Image Height="Auto" Source="Resources/Users.png" x:Name="PART_imgUser" VerticalAlignment="Top" Stretch="Uniform" Margin="0,0,0,0" Grid.Column="1">
<Image.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Image.RenderTransform>
</Image>
<TextBlock HorizontalAlignment="Center" Margin="0,0,0,0" Width="Auto" Grid.Column="0" Grid.ColumnSpan="3" Grid.Row="1" TextWrapping="Wrap" VerticalAlignment="Center" TextAlignment="Center" x:Name="txtBottom" Text="{Binding Mode=OneWay, Path=LocationName}">
<TextBlock.DataContext>
<RRML_RRMLServiceReference:Location LocationName="Initial Name"/>
</TextBlock.DataContext>
</TextBlock>
<TextBlock HorizontalAlignment="Right" Margin="0,0,0,0" VerticalAlignment="Center" Text="L" TextWrapping="Wrap"/>
<TextBlock Margin="0,0,0,0" Text="R" TextWrapping="Wrap" d:LayoutOverrides="Width, Height" Grid.Column="2" HorizontalAlignment="Left" VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
的TextBlock
值我正在尝试设置为txtBottom
。正如你所看到的,我试图将一个datacontext和一个数据绑定应用到该领域。这是有效的,但是当然所有的对象都会得到“Initial Name”的值。
我的问题是:
- 我怎么能将我的DataContext这样
txtBottom.Text
变化,或 - 我怎样才能改变
TextBlock
命名txtBottom
不绑定的价值? - 总之我可以访问这些字段或属性吗?
运行时间:) 到目前为止,我发现触发器只能在WPF中使用。
我觉得是这样的:
var styledobject = new NiceObject();
styledobject.Style = Application.Current.Resources["UserPin"] as Style;
styledobject.DataContext = locationData;
哪里locationData
是包含数据我的对象。
如果有人想知道;我正在地图上放置图标,并且想要命名它们。
感谢您的回答。 方案2解决了这个问题。我发现这里的关键是OnApplyTemplate,这是因为我在帮助中的备注下找到的: “调用GetTemplateChild以便返回对实例化后来自模板的对象的引用。” /Øyvind – 2009-04-20 13:06:29