Просто для удовольствия, немного менее элегантная версия, которая реализует кеширование, предложенное Marc:
public static string TransformXMLToHTML(string inputXml, string xsltString)
{
XslCompiledTransform transform = GetAndCacheTransform(xsltString);
StringWriter results = new StringWriter();
using (XmlReader reader = XmlReader.Create(new StringReader(inputXml)))
{
transform.Transform(reader, null, results);
}
return results.ToString();
}
private static Dictionary<String, XslCompiledTransform> cachedTransforms = new Dictionary<string, XslCompiledTransform>();
private static XslCompiledTransform GetAndCacheTransform(String xslt)
{
XslCompiledTransform transform;
if (!cachedTransforms.TryGetValue(xslt, out transform))
{
transform = new XslCompiledTransform();
using (XmlReader reader = XmlReader.Create(new StringReader(xslt)))
{
transform.Load(reader);
}
cachedTransforms.Add(xslt, transform);
}
return transform;
}
Из-за способа, которым вы настроили изображение вашего меню в первом. Вы обернули изображение в другой TouchableOpacity
, что означает, что внутренний TouchableOpacity
воспринимает событие касания пользователя. На самом деле это не то поведение, которое вы хотите, потому что вы хотите, чтобы TouchableOpacity
в headerLeft был получателем ввода. Так что просто удалите «лишнее» TouchableOpacity
.
// Inside Header
navigationOptions: ({ navigation }) => ({
headerLeft:
<TouchableOpacity onPress={() => {navigation.dispatch(DrawerActions.toggleDrawer())} }>
<MenuImage navigation={navigation}/>
</TouchableOpacity>,
//Created component and added inside navigationOptions
const MenuImage = ({navigation}) => {
if(!navigation.state.isDrawerOpen){
// No need of Touchable here. Since you want the above Touchable to pick up the onPress event.
return <Image source={require('../assets/images/menu.png')} style={{width: 24, height: 24, resizeMode: 'contain' ,marginLeft: 15}}/>.
}else{
return <MenuIcon style={{paddingLeft: 10, paddingRight: 10}} name="md-arrow-back" size={30} color="black"/>
}
}
Причина, по которой работает второй пример, заключается просто в том, что нет дополнительной Touchable
обработки события onPress.