我终于能够创建一个“简单”的透明按钮控件,基于ContentControl
. 但是,有人可以解释为什么在将子元素的背景设置为透明之前,我无法单击/点击控件的任何空白区域吗?我也遇到了这个问题:
- 我尝试使用边框
- 我设置了按钮的ControlTemplate而不是ContentTemplate。
这是我的“按钮”类:
public class TransparentButton : ContentControl {
public TransparentButton() {
HorizontalContentAlignment = HorizontalAlignment.Stretch;
}
public override void OnApplyTemplate() {
var child = Content as Grid;
if (child != null) {
child.Background = new SolidColorBrush(Colors.Transparent);
}
base.OnApplyTemplate();
}
}
在使用(假设是 Grid 孩子)时,它非常特定于我的案例,但它可以工作。我使用它的原因是启用了 TiltEffect 的列表(非 ListBox)。
问题的背景:
<ItemsControl x:Name="Items" toolkit:TiltEffect.IsTiltEnabled="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<controls:TransparentButton
cal:Message.Attach="[Event Tap] = [Action Go($dataContext)]">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Text="{Binding Test}" />
</StackPanel>
<StackPanel HorizontalAlignment="Right">
<TextBlock Text="{Binding Test2}" />
</StackPanel>
</Grid>
</controls:TransparentButton>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
如果您在项目内的 StackPanel 之间单击,则不会触发任何事件,也不会发生任何事情。只有当网格的背景是Transparent
“占用空间”时。
我来自网络背景,所以这很混乱;即使未设置背景,包含元素也应该是“可测试的”。