2011-08-30 20 views
18

Tôi có một nút WPF được định nghĩa như thế này:Đặt nội dung của Button trong phong cách

<Button Style="{StaticResource RevertButtonStyle}" /> 

đây là cách phong cách trông:

<Style x:Key="RevertButtonStyle" TargetType="{x:Type Button}"> 
    <Setter Property="Height" Value="25" /> 
    <Setter Property="Width" Value="20" /> 
    <Setter Property="Margin" Value="3,0,0,0" /> 
</Style> 

Làm thế nào để thay đổi phong cách để xác định nội dung để sử dụng hình ảnh có tên "revert.png"?

Cảm ơn,

Trả lời

26

Bạn không thể sử dụng đặt thuộc tính Nội dung cho một phiên bản của điều khiển Image, khi đó Hình ảnh có thể được sử dụng bởi nhiều nút. Điều này sẽ dẫn đến một "hình ảnh đã là con của ngoại lệ khác".

Thay vào đó, bạn có thể sử dụng một DataTemplate như vậy:

<Setter Property="ContentTemplate"> 
    <Setter.Value> 
     <DataTemplate> 
      <Image Source="revert.png" /> 
     </DataTemplate> 
    </Setter.Value> 
</Setter> 

Rõ ràng bạn có thể cần phải điều chỉnh nguồn của hình ảnh URI.

+0

hoạt động như một sự quyến rũ. Cảm ơn. – sean717

+0

Điều này đã giúp tôi ngay lập tức - tôi đã có ngoại lệ "trực quan đã là ..." với Đường dẫn mà tôi đã đặt làm nội dung nút theo kiểu. Cảm ơn. –

3

Trong ứng dụng của tôi, tôi đã xác định một điều khiển ImageButton mà xác định một tài sản ImageSource.

này được theo kiểu như thế này:

<Style TargetType="{x:Type controls:ImageButton}"> 
    <Setter Property="ForceCursor" Value="True" /> 
    <Setter Property="Cursor" Value="Hand" /> 

    <Setter Property="ToolTip" Value="{Binding Path=Caption, RelativeSource={RelativeSource Mode=Self}}" /> 

    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type controls:ImageButton}"> 
       <Image Width="16" Height="16" Source="{Binding Path=ImageSource, RelativeSource={RelativeSource Mode=TemplatedParent}}" Name="image" /> 

       <ControlTemplate.Triggers> 
        <Trigger Property="IsEnabled" Value="False"> 
         <Setter TargetName="image" Property="Opacity" Value="0.3" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Nhưng trong trường hợp của bạn, nếu bạn muốn sử dụng cùng một hình ảnh cho tất cả Button đối tượng với một Style bộ nhất định, bạn có thể đơn giản chỉ cần sử dụng <Image Source="pack://application:,,,/My.Assembly.Name;component/Icons/revert.png" /> trong Template nếu hình ảnh bạn muốn sử dụng đã được bao gồm dưới dạng tài nguyên trong ứng dụng.

+0

thx, nhưng nó không hoạt động tốt lắm. Vui lòng xem bài đăng của CodeNaked. – sean717

+0

Xin lỗi, tôi đã lỡ. Nên đã được ContentTemplate (như trong dump code tôi đăng), không phải nội dung như trong bản tóm tắt ban đầu của tôi. Đã chỉnh sửa cho người xem trong tương lai. – fatty

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