2017-07-19 52 views
0

我在下面的代碼中遇到了一些問題,編譯器不顯示任何錯誤,程序可以正常運行,但顏色變化時厚度不變。
有什麼問題?
我想一些與c#代碼隱藏有關的東西,因爲如果我在應用程序運行時手動更改厚度資源的值(新版本的vs2017允許我這樣做),一切正常。c#XAML厚度資源不能正常工作

XAML

... 
<Page.Resources> 
    <SolidColorBrush x:Key= "myColor" Color="Red"/> 
    <Thickness x:Key="myThickness">1,1,1,1</Thickness> 
<Page.Resources> 
... 
<Broder BorderBrush="{StaticResource myColor}" BorderThickness="{StaticResource myThickness}">something</Border> 
... 

C#

Thickness myThicknessVar= (Thickness)this.Resources["myThickness"]; 
myThicknessVar= new Thickness(5, 5, 5, 5); 

SolidColorBrush myColorVar= (SolidColorBrush)this.Resources["myColor"]; 
myColorVar.Color = Colors.Green; 
+0

爲您的XAML嘗試此操作<厚度x:鍵=「myThickness」底部=「1」左=「1」右=「1」頂部=「1」/>'。只有看起來像這樣的東西可能是一個問題 –

+0

@MattL。哦,我已經試過了,但visual studio不讓我寫左下角等等,它只是強調了這些詞,並將它們標記爲錯誤 – ek07

+0

這很奇怪,因爲我可以通過c#訪問這些屬性(但是沒有任何反應) – ek07

回答

1

的原因,這個工程:

SolidColorBrush myColorVar = (SolidColorBrush)this.Resources["myColor"]; 
myColorVar.Color = Colors.Green; 

是您正在修改你已經從資源字典檢索現有對象 - myColorVar。變量myColorVar是對this.Resources [「myColor」]的引用。

當你這樣做:

Thickness myThicknessVar = (Thickness)this.Resources["myThickness"]; 
myThicknessVar = new Thickness(5, 5, 5, 5); 

你是變量「myThicknessVar」賦予了新的價值,而不改變實際值是在資源字典。

爲了達到你需要做兩件事情所需的行爲:

  1. 更改存儲在資源字典中的對象:
this.Resources["myThickness"] = new Thickness(5, 5, 5, 5); 
  • 使用DynamicResource in XAML而不是StaticResource:
  • <Border BorderBrush="{StaticResource myColor}" BorderThickness="{DynamicResource myThickness}"> 
        <!-- something --> 
    </Border> 
    
    +0

    第一個metod不起作用,我已經嘗試過讓你的理由相同,至於第二個metod,我使用的是UWP,我不認爲這個平臺可以使用「DynamicResource」 – ek07

    +0

    DynamicResource在UWP中可用。你有沒有嘗試用XAML中的「DynamicResource」替換「StaticResource」?你需要做的,1和2,使其工作。 –

    +0

    看看這個視頻(分鐘12:50):https://mva.microsoft.com/en-US/training-courses/xaml-for-windows-10-layout-14328?l=cSQEhy4sB_4604819052 DynamicResource不會存在了 – ek07