Ответ МаркФельдмана сработал, но возникла проблема с событием щелчка мышью. При использовании элемента Padding on the Border щелчки мыши не регистрируются при щелчке в области дополнения между текстовыми элементами. Чтобы исправить это, я заменил Border на StackPanel и переместил Padding на TextBlock. Заполнение самого текстового блока правильно регистрирует щелчок.
Окончательный xaml:
<UserControl.Resources>
<ResourceDictionary>
<ControlTemplate x:Key="AppleItemTemplate">
<StackPanel Opacity="1">
<TextBlock Padding="10,5" Foreground="{DynamicResource PrimaryTextColor}">
<TextBlock.Text>
<Binding Path="DisplayName"/>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</ControlTemplate>
<ControlTemplate x:Key="AppleItemTemplateSelected">
<StackPanel Background="{DynamicResource LeftSidebarBGColorHighlight}">
<TextBlock Padding="10,5" Foreground="{DynamicResource PrimaryTextColor}">
<TextBlock.Text>
<Binding Path="DisplayName"/>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</ControlTemplate>
<Style TargetType="{x:Type ListBoxItem}" x:Key="AppleContainerStyle">
<Setter Property="Template" Value="{DynamicResource AppleItemTemplate}"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Template" Value="{DynamicResource AppleItemTemplateSelected}"/>
<Setter Property="BorderThickness" Value="0"/>
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
Да, я сталкивался с этой проблемой слишком часто. Area
глобальная переменная, так как она не имеет var
перед ним. Кроме того, не используйте для... в конструкции.
Но Вы могли бы все еще столкнуться с подобной проблемой. Бог знает, сколько сценариев я отладил из-за подобной ошибки. Выполнение следующих гарантий надлежащий обзор:
var Areas = ['ping','http', 'smtp', 'pop3'];
for( var i = 0; i < Areas.length; i++ ){
(function(area) {
$(area).click(function(){ alert(area); /* ShowArea(area); */ });
})(Areas[i]);
}
Это - вещь JavaScript; это не связанный jQuery. То, что Вы делаете, создает закрытие, но Вы не понимаете правильно, как они работают.
Вы могли бы хотеть читать на http://blog.morrisjohns.com/javascript_closures_for_dummies, особенно Примеры 5, 6, и 7.
Проверьте объем своей переменной "области". Вы в основном присваиваете глобальную переменную, таким образом, на последнем повторении "область" ограничен по объему за пределами цикла.
убедитесь, что Вы добавили обработку событий щелчка после того, как DOM был загружен, можно включать это в главный элемент:
var Areas = ['ping','http', 'smtp', 'pop3'];
$(document).ready(function() {
$.each(Areas, function(i, v){
var Area = '#show_fold_' + v;
$(Area).click(function() {
alert(Area);
});
});
}