我正在使用Silverlight 5和WCF Ria Services。爲了快速開發,我編寫了一個基於提供者的系統來填充ComboBoxes。當我設置一個組合提供程序並將EditValue綁定到ViewModel時,一切正常。如何在ComboBox中顯示BusyIndicator
<Controls:BLComboBoxEdit2 x:Name="cbeDepartmentId"
EditValue="{Binding Path=Selected.DepartmentId, Mode=TwoWay"
ComboDataProvider="{Binding Path=DepartmentComboDataProvider}" />
但是爲了通知用戶,而組合正在等待數據被提供者加載,我需要一個BusyIndicator。我無法弄清楚如何在繼承控件中顯示BusyIndicator(我們可以通過重寫OnPaint事件等方式回到WinForm中),所以我創建了一個UserControl,xaml就是這樣(我們正在使用DevExpress ComboBoxEdit),
<UserControl ...>
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../Assets/Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<dxe:ComboBoxEdit x:Name="combo" />
<toolkit:BusyIndicator x:Name="busyIndicator" Style="{StaticResource AjaxBusyIndicator}"
IsBusy="{Binding Path=ComboDataProvider.IsWorking}">
</toolkit:BusyIndicator>
</Grid>
,它看起來像這樣,
在某些情況下(網格列等),我們需要一個ComboBoxEdit衍生控制,而不是用戶控件。所以我開始修改代碼,但我被卡住了。我不知道如何添加一個子控件(或覆蓋控件?),以便在控件忙時顯示。
<dxe:ComboBoxEdit ...>
<dxe:ComboBoxEdit.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../Assets/Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
<Common:PublicStrings x:Key="ResourceStrings" />
</ResourceDictionary>
</dxe:ComboBoxEdit.Resources>
<Grid>
<toolkit:BusyIndicator x:Name="busyIndicator" Style="{StaticResource AjaxBusyIndicator}"
IsBusy="{Binding Path=ComboDataProvider.IsWorking}" />
</Grid>
當運行上述代碼中,組合工作正常,但繁忙指示符中未示出(從這個代碼預期,繁忙指示符成爲二合一的內容,如果我彈出組合[加載時正在進行中]我可以看到BusyIndicator :)但第一次加載後,它會消失,因爲內容已更改)。
有沒有辦法做到這一點?現在我試圖在後面的代碼中設置內容(在IsBusy更改後,我想將內容設置爲BusyIndicator或默認保留),但沒有運氣。
任何幫助將不勝感激。
感謝我使用這種方法的answer.In事實(你可能會看到上面的鱈魚e,combo和busyindicator在同一個網格行中),並將其轉換爲用戶控件(BLComboBoxEdit)以避免爲每個組合使用編寫BusyIndicator,但這種方式控件的類型爲UserControl.I需要ComboBoxEdit派生控件才能在某些cases.When從ComboBoxEdit派生我意識到我不知道在哪裏把BusyIndicator xaml.If我直接寫它成爲內容。我需要將BusyIndicator顯示爲組合上的覆蓋圖。順便說一下,此問題的優先級已更改,現在它不是必須的:) – 2012-07-12 07:50:40