2013-02-13 25 views
7

Tôi có một điều khiển Nút như một nguồn lực trong từ điển tài nguyên như sau:Điều khiển WPF là StaticResource trong Từ điển tài nguyên, được sử dụng trong nhiều Windows WPF?

<!--ButtonResources.xaml file--> 
<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Button x:Key="buttonResource" Content={Binding BoundText}/> 
</ResourceDictionary> 
<!--ButtonResources.xaml file--> 

tôi hiện nay sử dụng nút trên điều khiển này ràng buộc để sở hữu nội dung của ContentControl khiển trong 2 Windows file .xaml khác nhau trong đó mỗi WindowDataContext riêng và do đó mỗi cửa sổ sẽ hiển thị điều khiển nút Content của nút trên dựa trên giá trị thuộc tính ViewModel'sBoundText như sau cho mỗi Cửa sổ.

<Window x:Class="TestClass1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Window.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="ButtonResources.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Window.Resources> 
    <Grid> 
     <ContentControl Content={StaticResource buttonResource}/> 
    </Grid> 
</Window> 

Nhưng, vấn đề là hiển thị cùng một giá trị cả của Window cho các tài sản BoundText có nghĩa là cả hai WPF Windows có cùng thể hiện của nút điều khiển từ tài nguyên, sử dụng trong cả Windows.

Làm thế nào tôi có thể giải quyết vấn đề này như vậy mà mỗi cửa sổ được một kiểm soát nút tách biệt với tài nguyên và vẫn hiển thị khác nhau giá trị cho các BoundText tài sản từ họ riêng ViewModel?

Edit: Cũng vì lý do nêu tại MSDN như dưới đây, tôi không thể sử dụng x: Shared = "False" thuộc tính để giải quyết này:

• Các ResourceDictionary có chứa các vật dụng này phải không được lồng vào nhau trong ResourceDictionary khác. Ví dụ: bạn không thể sử dụng x: Được chia sẻ cho các mục trong ResourceDictionary nằm trong một Kiểu mà đã là một mục ResourceDictionary.

Trả lời

8

Cậu cố gắng sử dụng các thuộc tính x:Shared?

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Button x:Shared="False" x:Key="buttonResource" Content={Binding BoundText}/> 
</ResourceDictionary> 

Để biết thêm thông tin, đọc here.

Trong trường hợp không hoạt động, bạn có thể lưu mẫu trong tài nguyên của mình, thay vì nút và sử dụng ContentControl bên trong cửa sổ của bạn để hiển thị nó.

+0

Cảm ơn.Nhưng, tôi không thể sử dụng thuộc tính đó làm lý do được đề cập trong phần ** Chỉnh sửa: ** của câu hỏi. – VS1

+0

Và bạn sử dụng ví dụ trên, bạn sẽ sử dụng thẻ sau. Loman

+0

Tuyệt vời, x: Chia sẻ vừa giải quyết vấn đề của tôi cũng như với mục đích chia sẻ một điều khiển giữa các Chế độ xem khác nhau. – usefulBee

3

Hãy thử:

<Style TargetType="Button" x:Key="buttonResource"> 
    <Setter Property="Content" Value="{Binding BoundText}" /> 
</Style>


<Button Style="{StaticResource buttonResource}" /> 
+0

Cảm ơn. Tôi cập nhật câu hỏi của mình để bao gồm việc sử dụng Kiểm soát nội dung, làm cách nào để liên kết ContentControl trong mỗi Cửa sổ WPF (.xaml) với tài nguyên Nút trong từ điển tài nguyên theo câu trả lời ở trên? – VS1

+0

Tôi không thấy nó khác nhau như thế nào. Bạn có thể đăng mã của ContentControl của mình không? – KBoek

+0

Tôi đã thêm mã để sử dụng ContentControl trong cả hai tệp Window.xaml .. Việc sử dụng thực tế không phải là nút nhưng điều khiển khác và bởi vì chúng tôi muốn thay đổi tệp tài nguyên xaml trong các phiên bản sau mà không phải thay đổi Cửa sổ. Mã tệp xaml ... – VS1

Các vấn đề liên quan