我在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