2014-11-25 28 views
0

用戶在文本框中輸入內容並點擊輸入按鈕。當輸入按鈕被擊中時,調用AddFieldCommand。我如何在XAML中做什麼?如何使用EventToCommand - XAML中的錯誤

我的代碼給了我一個警告:「屬性'文本'被設置多次」。

我需要知道畫布中哪個對象正在更新,因此我可以將TextBox中的內容添加到我的模型 - 這就是爲什麼我使用EventToCommand

<TextBox x:Name="txtFields" Text="{Binding FieldsTextProperty, UpdateSourceTrigger=PropertyChanged}" Height="23" TextWrapping="NoWrap" Background="#FFCBEECD" AcceptsReturn="False" > 
    <TextBox.InputBindings> 
     <KeyBinding Key="Enter" > 
     </KeyBinding> 
    </TextBox.InputBindings> 
    <i:EventTrigger EventName="AddField"> 
     <cmd:EventToCommand Command="{Binding DataContext.AddFieldCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" PassEventArgsToCommand="True"/> 
    </i:EventTrigger> 
</TextBox> 

任何人都可以幫忙嗎?

回答

0

在XAML中,一切,將其放置在一個元素中成爲其內容。對於文本框,這將設置Text屬性。這是爲了允許這樣的事情:

<TextBox>Foo bar</TextBox> 

因此,您可以將內容放置在XAML元素中。這是相同的:

​​

現在,如果你看看你的XAML代碼,你會發現,你有TextBox元素中兩個元素:TextBox.InputBindingsi:EventTrigger。爲了解釋第一個問題,您需要知道還有另一種方法來指定元素的屬性值,方法是使用子元素。這使得相當於這個上面的例子:

<TextBox> 
    <TextBox.Text>Foo bar</TextBox.Text> 
</TextBox> 

這適用於的TextBox所有屬性。現在,InputBindingsTextBox的一個屬性,因此將它作爲子元素將正確設置該屬性,並且它也不會影響元素的內容值(因此Text未由其存在設置)。但是,i:EventTrigger不是TextBox的屬性,因此它將設置TextBox的內容 - 給出您看到的錯誤消息。

要使用交互事件觸發器,您需要將這些觸發器放入附加的屬性i:Interaction.Triggers。作爲一個附加屬性,它可以像上面那樣用一個子元素來設置。所以,你的代碼應該是這樣的:

<TextBox …> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="AddField"> 
      <cmd:EventToCommand … /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</TextBox> 
+0

但是如何在用戶點擊輸入按鈕時觸發'EventToCommand'?並且非常感謝您的演練! – MikaelKP 2014-11-25 13:34:28

+0

通過您的設置,現在在引發'AddField'事件時執行該命令。您需要先聽取['KeyPress'](http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress.aspx)事件(並檢查按下的按鍵是Enter鍵)。你可以爲'TextBox'子類型並添加一個'EnterKeyPressed'事件,然後你可以使用EventTrigger for。 – poke 2014-11-25 13:38:19

0

您可以使用ICommand接口執行你的命令,並使用該按鈕允許它保持focus.So的ISDEFAULT =真屬性,當你點擊進入它將執行你的按鈕綁定命令。

<TextBox x:Name="txtFields" Text="{Binding FieldsTextProperty,UpdateSourceTrigger=PropertyChanged}" Height="23" TextWrapping="NoWrap" Background="#FFCBEECD" AcceptsReturn="False" />        

     <Button Name="btnEnter" IsDefault="True" Command="{Binding DataContext.AddFieldCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" /> 
+0

你知道沒有按鈕的方法嗎?每次用戶點擊「Enter」時,我都想觸發'EventToCommand'。 – MikaelKP 2014-11-25 13:36:03