2012-12-06 37 views
1

我有這樣定義的類(我已刪除了一些代碼行,像null檢查,以保持它短):獲取拒絕訪問時提高性能改變

public sealed class CodeTheme : INotifyPropertyChanged 
{ 
    public void Reload() 
    { 
     PropertyChanged(sender, new PropertyChangedEventArgs("MyProperty")); 
    } 

    public Thickness MyProperty 
    { 
     get 
     { 
      return new Thickness(): 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

我註冊在XAML的codetheme類這樣,使用StandardStyles.xaml

<me:CodeTheme x:Key="Theming" /> 

比,我使用它在VARIOS模板和樣式,像這樣:

<Style x:Key="Style1" TargetType="ListViewItem"> 
    <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
    <Setter Property="VerticalContentAlignment" Value="Stretch" /> 
    <Setter Property="Margin" Value="{Binding Source={StaticResource Theming}, Path=MyProperty}" /> 
</Style> 

我的話,我可能會調用Reload方法在程序中的任何時候,第一次在覆蓋OnLaunched事件的App.xaml.cs

這適用於顏色,字符串和其他厚度值當我爲它們分配在DataTemplate。然而,當我在一個Style使用它,我只要我火PropertyChanged事件得到以下錯誤:

System.UnauthorizedAccessException的是由用戶代碼 的HResult = -2147024891 消息=訪問被拒絕未處理。 (異常來自HRESULT:0X80070005(E_ACCESSDENIED)) 源=系統 堆棧跟蹤:(我已經刪除了) 的InnerException:

我試圖通過RunAsyncWindow.Current.Dispatcher引發事件但沒有改變任何東西。我在這裏做錯了什麼?

+0

您確定PropertyChanged不爲null? –

+0

@ArsenMkrt是的,我完全相信,因爲在原始源代碼中有一個空的檢查(正如我在第一句中提到的,我已經刪除了一些行來保持它的簡短) – UrbanEsc

+0

有更多的堆棧跟蹤可能會很有幫助。 – mydogisbox

回答

1

上次我檢查時,Style Setters中不支持綁定。

+0

是的,他們應該評估一次 - 但他們這樣做!問題在於我調用了在OnLaunched中的Reload()。任何其他時間它不會崩潰!要清楚,我不需要綁定刷新,我只是不希望它崩潰。 – UrbanEsc