2009-02-17 7 views
7

Tôi có một cọ vẽ trực quan là một nhóm các hình dạng, màu chính trong số đó là một nguồn tài nguyên động - vì vậy hình dạng là ví dụ MyShape và Màu, MyColour được tham chiếu bởi đối tượng Hình dạng.
Vấn đề của tôi là khi tôi cập nhật màu cho điều này - nó chỉ xảy ra lần đầu tiên hình được tải (màu cần được đặt trước) tuy nhiên nhiều như tôi thay đổi màu, nó sẽ không cập nhật tài nguyên động sử dụng màu sắc - làm thế nào để tôi thực hiện công việc này?
Chỉ cần tạo tài nguyên động trong một tài nguyên động khác và yêu cầu cả hai cập nhật khi tôi thay đổi màu.
Tôi không biết cách làm việc này - Tôi đã dành thời gian tạo bộ chọn màu cho WPF chỉ để tìm thấy tôi không thể thay đổi màu của mục này - tài nguyên 1-Tier hoạt động ở nơi tôi đặt bàn chải/màu trực tiếp nhưng không một màu trong một đối tượng khác hoặc Tài nguyên 2-Tier.Làm cách nào để cập nhật Tài nguyên động trong một tài nguyên động?

Chỉnh sửa: Vấn đề của tôi có vẻ là cụ thể khi sử dụng các tài nguyên/Từ điển riêng biệt vì chương trình của tôi cần truy cập mục này từ lớp không phải Cửa sổ, ví dụ chính được đề cập không hoạt động khi MyColor ở chế độ riêng biệt Nguồn.

Trả lời

5

Trừ khi tôi hiểu sai tình huống, chính xác những gì bạn đang nói về hoạt động khá tốt. Tôi chỉ cố gắng nó ra với XAML này:

<Window x:Class="ConditionalTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 

    <Window.Resources> 
     <SolidColorBrush x:Key="MyColor" Color="Aqua" /> 

     <VisualBrush x:Key="MyBrush"> 
      <VisualBrush.Visual> 
       <Ellipse Height="50" Width="100" Fill="{DynamicResource MyColor}" /> 
      </VisualBrush.Visual> 
     </VisualBrush> 
    </Window.Resources> 
    <Grid Background="{DynamicResource MyBrush}"> 
     <Button Height="30" Width="Auto" VerticalAlignment="Center" HorizontalAlignment="Center" Content="ChangeColor" Click="Button_Click" /> 
    </Grid> 
</Window> 

Và sau đó thay đổi màu sắc trong xử lý nhấp chuột cho nút đó:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    ((SolidColorBrush)Resources["MyColor"]).Color = Colors.Purple; 
} 

Và nó làm việc như một nhà vô địch.

+0

Cảm ơn vì điều này - tuy nhiên điều này không có tác dụng khi Tài nguyên nằm trong Từ điển Tài nguyên, vấn đề của tôi là chuyển tài nguyên sang Window.Resources như ví dụ của bạn - tuy nhiên điều này có thể sử dụng được bởi lớp học phần mềm của tôi - sẽ chỉnh sửa câu hỏi của tôi để đề cập đến giải pháp này – RoguePlanetoid

+0

Giải pháp của tôi là lưu trữ tài nguyên Window.Resources như ví dụ này cho thấy và điều này làm việc như ví dụ của bạn đã làm - nhưng vẫn muốn giữ tất cả các tài nguyên trong Resources.xaml, nhưng nó hoạt động và đó là những gì quan trọng. – RoguePlanetoid

+0

Có ai từng khám phá cách sử dụng nó trong một Từ điển Tài nguyên không? – tofutim

0

Bạn có thể đăng ví dụ về cách bạn đang cố thay đổi màu trong từ điển tài nguyên không?

Khi tôi tạo một ứng dụng mẫu và cố gắng thay đổi giá trị tài nguyên, có vẻ như SolidColorBrush trong từ điển tài nguyên đã bị đóng băng để không thể sửa đổi. Để giải quyết vấn đề này, tôi chỉ thiết lập giá trị mới cho SolidColorBrush mới.

+0

Tạo một cọ vẽ mới mỗi lần sẽ làm việc tuy nhiên điều này phủ nhận việc sử dụng một tài nguyên động như tái tạo tài nguyên mỗi lần cho một hình dạng phức tạp với sự hỗ trợ màu sắc không đơn giản như Dim Item như New SolidColorBrush (MyColor). – RoguePlanetoid

+0

Nếu bàn chải đã bị đóng băng thì cách duy nhất để thay đổi nó là tạo một cái mới. Bạn có thể sử dụng phương pháp Clone sẽ tạo một bản sao, theo cách đó bạn chỉ phải thay đổi các thuộc tính mà bạn muốn thay đổi. Bạn có thể đăng một ví dụ về cách bạn đã cố gắng để thay đổi bàn chải? –