이것은 C# 및 WPF 용으로 가장 좋은 온라인 도움말 사이트로 간주되는 stackoverlow에 대한 첫 번째 게시물입니다.C# WPF UserControl에서 ControlTemplate에 정의 된 버튼에 액세스 할 수 없습니다.
저는 스타일로 정의한 버튼에 버튼 핸들러 이벤트를 첨부하는 방법을 알아 내려고 지난 3 일 동안 약 6 시간 이상을 조사했습니다. 내 상황은 웹에서 본 다른 모든 사례와는 다른 것으로 보인다. 그래서 여기에 가서 당신의 의견을 분명히 감사드립니다.
<ScrollViewer Grid.Column="2" Grid.ColumnSpan="2"
HorizontalScrollBarVisibility="Visible"
VerticalScrollBarVisibility="Hidden"
Background="AliceBlue">
<ItemsControl ItemsSource="{Binding LaserDataItems}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Background="AliceBlue" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
다음 내가 그리드 내에서 정의 MainWindow.xaml에서 조각이 LaserDataItems에 바인딩 필요에 따라 동적으로 생성되는 display.These에 추가 된 UserControls의 목록이 포함됩니다. 하지만 실제로 컨트롤 뒤에 코드에서 모든 작업을 시도합니다 (아래)
내가 UserControl을 보여주기 전에 여기에 UserControl과 함께 사용할 스타일이 나와 있습니다. 이 여기에
<Style x:Key="HeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Button x:Name="MyButton" Height="20"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
템플릿을 할당 ColumnHeaderStyle이있는 UserControl의 데이터 그리드 내에서 UserControl을
<UserControl x:Class="EClient.Controls.GetAllLaserData"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<DataGrid Name="laserDataGrid"
ColumnHeaderStyle="{StaticResource HeaderStyle}"
AutoGenerateColumns="False"
ItemsSource="{Binding }"
IsReadOnly="True"
RowHeaderWidth="0"
Height="567"
VerticalAlignment="Top"
RowHeight="17">
<DataGrid.Columns>
<DataGridTextColumn
Width="53"
Header="{Binding HeaderName}"
Binding="{Binding Name}"></DataGridTextColumn>
</DataGrid.Columns>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="IsEnabled" Value="False"/>
</Style>
</DataGrid.RowStyle>
</DataGrid>
</UserControl>
입니다을로드 한 후 나의 첫번째 목표는 버튼 클릭 이벤트를 만드는 것입니다 : HeaderStyle . 이 스타일에는 클릭 핸들러를 인스턴스화 할 때마다 첨부해야하는 버튼이 있습니다. 어떻게해야합니까? OnApplyTemplate 메서드를 재정 의하여 액세스하려했지만 시도한 모든 것이 null을 반환합니다. 이 메서드가 실행될 때 버튼이 아직 인스턴스화되지 않았습니까? 이 버튼을 사용할 수있는 방법이 있어야합니다.
이것을 실행하고 이러한 UserControls (데이터 격자) 목록을 만들면 버튼이 첫 번째 셀 (각 격자의 머리글)에 표시됩니다.
또한 시각적 트리를 가로 지르지 만 아무 소용이없는 일반적인 루틴을 사용해 보았습니다. 사실 내가 추구해야 할이 무언가가 있습니다. 저는 실제로 시도 할 아이디어가 없어졌습니다. 나는이 문제에 대한 또 다른 해결책을 발견했지만
다음 작품은 2013년 10월 26일
에 추가 된, 나는 아직도 그것을 해결에 관심이 있어요. 정말 좋은 질문이라고 생각했습니다.
어쨌든 나는 무엇을 하려는지 사진을 찍을 것이라고 생각했습니다. 아마 그것은 문제를보다 잘 파악할 수있을 것입니다.
다음 링크는 도움이 될 수 있습니다. http://stackoverflow.com/questions/4030764/how-to-get-datagridcolumnheader-from-datagridcolumn http://stackoverflow.com/questions/1658397/wpf-datagrid-header-text - 바인딩 (5 월 없음). – Chris
Chris,이 링크는 실제로 유망 해 보입니다. 고맙습니다. 내가 마을로 돌아 왔을 때 나는 그들에게 한 번 시도해보고 알려 줄 것이다. 감사합니다, 다시 - 릭 – Rick
이 유용 희망 뭔가, 나는 그것이 작동하지 않았다, 뭔가 나 자신을 균열을했고 이유를 이해하려고 할 때 그 우연히 발견했다. – Chris