2

如果你打開Blend,將一個按鈕放在一個網格上並在其上設置幾個ChangeProeprtyActions ...將失敗,並顯示一條錯誤消息。Silverlight的ChangePropertyAction按鈕控件不能正常工作

<UserControl 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 
x:Class="SL4_Button_States.MainPage" 
Width="640" Height="480"> 

<Grid x:Name="LayoutRoot" Background="White"> 
    <Button x:Name="button" Content="Button" Height="39" Margin="68,42,299,0" VerticalAlignment="Top"> 
     <i:Interaction.Triggers> 
      <i:EventTrigger> 
       <ei:ChangePropertyAction PropertyName="Content" Value="Button is now loaded!" TargetObject="{Binding ElementName=button}"/> 
      </i:EventTrigger> 
      <i:EventTrigger EventName="Click"> 
       <ei:ChangePropertyAction PropertyName="Content" Value="temporary"/> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 
    </Button> 
</Grid> 

的錯誤信息是這樣的:

Webpage error details 

Message: Unhandled Error in Silverlight Application The type 'Object' was not found. [Line: 2 Position: 10] at MS.Internal.XcpImports.CreateFromXaml(String xamlString, Boolean createNamescope, Boolean requireDefaultNamespace, Boolean allowEventHandlers, Boolean expandTemplatesDuringParse) 
    at MS.Internal.XcpImports.CreateFromXaml(String xamlString, Boolean createNamescope, Boolean requireDefaultNamespace, Boolean allowEventHandlers) 
    at Microsoft.Expression.Interactivity.TypeConverterHelper.ExtendedStringConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value) 
    at Microsoft.Expression.Interactivity.Core.ChangePropertyAction.Invoke(Object parameter) 
    at System.Windows.Interactivity.TriggerBase.InvokeActions(Object parameter) 
    at System.Windows.Interactivity.EventTriggerBase.OnEvent(EventArgs eventArgs) 
    at System.Windows.Interactivity.EventTriggerBase.OnEventImpl(Object sender, EventArgs eventArgs) 
    at MS.Internal.CoreInvokeHandler.InvokeEventHandler(UInt32 typeIndex, Delegate handlerDelegate, Object sender, Object args) 
    at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName, UInt32 flags) 
Line: 1 
Char: 1 
Code: 0 
URI: http://localhost:62193/Silverlight.js 

如果你在一個TextBlock添加ChangePropertyAction ...正常工作:

<TextBlock Height="20" Margin="207,132,138,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top"> 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="MouseLeftButtonDown"> 
       <ei:ChangePropertyAction PropertyName="Text" Value="Mouse Left BUtton Down"/> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 
    </TextBlock> 

如果您有任何想法爲什麼發生這種情況請賜教我......如果有另一種/更好的方式來做到這一點,除了國家請讓我知道。

謝謝。

回答

3

它失敗了,因爲Button上的Content屬性不僅僅是一個字符串,而是一個對象。即使Blend會讓你設置它,但我不確定這是可能的。要更改按鈕上的文字內容,你需要做這樣的事情:

<Button x:Name="button" HorizontalAlignment="Left" Height="23" Margin="154,98,0,0" VerticalAlignment="Top" Width="113"> 
    <Button.Content> 
     <TextBlock x:Name="btnText" Text="Orginal" /> 
    </Button.Content> 
    <i:Interaction.Triggers> 
    <i:EventTrigger> 
     <ei:ChangePropertyAction PropertyName="Text" Value="Loaded" TargetName="btnText"/> 
    </i:EventTrigger> 
    <i:EventTrigger EventName="Click"> 
     <ei:ChangePropertyAction PropertyName="Text" Value="Clicked" TargetName="btnText"/> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 

+0

謝謝科比!我暗示了許多事情......這就是爲什麼我期待它知道,如何處理它,在它讓我選擇它的情況下......:) – asuciu 2012-03-13 01:01:25

0

按鈕X:NAME = 「按鈕」 CONTENT = 「按鈕」 HEIGHT = 「39」 保證金=「68 ,42,299,0" 點擊= 「button_Click」 的MouseRightButtonDown = 「button_MouseRightButtonDown」 VerticalAlignment = 「評出的」

private void button_MouseRightButtonDown(object sender, MouseButtonEventArgs e) 

    { 
     ((Button)sender).Content = "Right Click"; 
    } 

    private void button_Click(object sender, RoutedEventArgs e) 
    { 
     ((Button)sender).Content = "Button Click"; 
    } 
+0

感謝您的帖子瑪尼,但我有興趣從xaml的角度來看如何實現這一點。 :) – asuciu 2012-03-13 13:01:01

3

如何通過ChangePropertyAction更改按鈕的內容在Blend?

以下所有步驟都是在快速混合4

  1. 添加一個按鈕在畫板。將「ChangePropertyAction」從Assets拖動到 按鈕。
  2. 在數據面板中,創建一個新的ContentControl數據源(單擊「創建對象數據源」,搜索「ContentControl」並單擊確定,數據源將被命名爲ContentControlDataSource)。
  3. 在對象和時間軸中,將焦點放在ChangePropertyAction按鈕上。在Property-> Common Properties-> PropertyName中,選擇「Content」,並使用Value創建與ContentControlDataSource的數據綁定。 (在設置內容值的同時,在值的末尾點擊小矩形選擇「數據綁定...」,在「創建數據綁定」對話框中選擇數據字段中的ContentControlDataSource)
  4. 在「對象和時間軸」面板中,然後重新對焦按鈕的ChangePropertyAction,在Property-> Common Properties-> Value中,你可以在文字周圍看到一個黃色的矩形,如「(ContentControl)New」,點擊最後的小黃色矩形,然後選擇「Reset」。當黃色矩形消失後,單擊Value屬性後的New按鈕,當彈出「Select Object」對話框時,搜索「TextBlock」並添加它,然後根據需要設置TextBlock的文本,現在就構建並測試。並且您可以看到文字更改爲您設置的內容。

XAML看起來像:

<Button Content="Button" HorizontalAlignment="Left" Margin="125,51,0,0" VerticalAlignment="Top" Width="75"> 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="Click"> 
       <ei:ChangePropertyAction PropertyName="Content"> 
        <ei:ChangePropertyAction.Value> 
         <TextBlock Text="HelloText"/> 
        </ei:ChangePropertyAction.Value> 
       </ei:ChangePropertyAction> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 
    </Button>